query must cutoff_frequency filter elasticsearch proximity

filter - cutoff_frequency - must match elasticsearch



Consulta de proximidad compleja Elasticsearch (1)

Dado que tengo una consulta como la siguiente:

council* W/5 (tip OR tips)

La consulta anterior se puede traducir como: Encuentre cualquier cosa que tenga council * y (tip O tips) con no más de 5 palabras de diferencia.

Entonces el siguiente texto coincidirá:

  • Consejo del Ayuntamiento de Shellharbour
  • Consejo mejor consejo
  • consejos 10 mejores consejos

Pero este no debería coincidir:

  • ... Ayuntamiento en Shellharbour. No hay ningún buen consejo en absoluto.

Necesito ayuda para construir una consulta elasticsearch para eso. Estaba pensando en la consulta de Regex, pero no estoy seguro de mejores alternativas. Gracias


Puede usar una combinación de la consulta span_near , span_multi y span_or . Podemos usar la consulta a continuación para realizar la misma búsqueda.

{ "query": { "span_near": { "clauses": [ { "span_multi": { "match": { "prefix": { "text": "council"} } } }, { "span_or": { "clauses": [ { "span_term": { "text": { "value": "tip" } } }, { "span_term": { "text": { "value": "tips" } } } ] } } ], "slop": 5, "in_order": true } } }

Las cosas importantes a tener en cuenta son span_term, que es el texto que buscas . En este ejemplo, solo tenía un campo llamado "texto". Slop indica el número de palabras que permitiremos entre los términos, e in_order indica que el orden de las palabras es importante. Por lo tanto, el "consejo de sugerencias" no coincidirá, mientras que el "consejo del consejo" sí lo hará.