2014-02-13 2 views
5

Я запускаю нечеткий поиск и должен видеть, какие слова были сопоставлены. Например, если я ищу запрос testing, и он совпадает с полем с предложением The boy was resting, мне нужно знать, что матч был вызван словом resting.Определение того, какие слова были сопоставлены в нечетком поиске

Я попытался установить параметр explain = true, но, похоже, он не содержит информации, которая мне нужна. Есть предположения?

+0

К сожалению, я не вижу ничего в документации Fuzzy. Я бы предположил, что объяснение - это ваш лучший выбор, но похоже, что это не так. Мне тоже интересно. – Sam

+1

@SamSullivan После немного большего количества исследований я нашел ответ. Это функция, называемая подсветкой, которую я опубликовал в ответ ниже. – Ari

+0

А, вы на самом деле хотели его выделить? XY-проблема. :) Позвольте мне ответить на потомство. –

ответ

7

Хорошо, это то, что я искал:

После небольшого исследования, я нашел Highlighting feature из elasticsearch.

По умолчанию он возвращает фрагмент контекста, связанный с совпадением, но вы можете установить размер фрагмента на длину запроса, чтобы возвращать только точное соответствие. Например:

{ 
    query : query, 
    highlight : { 
     "fields" : { 
      'text' : { 
       "fragment_size" : query.length 
      } 
     } 
    } 
} 
0

Использование explain должно дать вам некоторые подсказки, хотя и не очень легко доступны.

Если вы запустите следующее, также имеющееся на https://www.found.no/play/gist/daa46f0e14273198691a, вы должны увидеть, например. description: "weight(text:nesting^0.85714287 in 1) […], description: "weight(text:testing in 1) [PerFieldSimilarity] […] и т. Д. В _explanation.

#!/bin/bash 

export ELASTICSEARCH_ENDPOINT="http://localhost:9200" 

# Create indexes 

curl -XPUT "$ELASTICSEARCH_ENDPOINT/play" -d '{}' 

# Index documents 
curl -XPOST "$ELASTICSEARCH_ENDPOINT/_bulk?refresh=true" -d ' 
{"index":{"_index":"play","_type":"type"}} 
{"text":"The boy was resting"} 
{"index":{"_index":"play","_type":"type"}} 
{"text":"The bird was testing while nesting"} 
' 

# Do searches 

curl -XPOST "$ELASTICSEARCH_ENDPOINT/_search?pretty" -d ' 
{ 
    "query": { 
     "match": { 
      "text": { 
       "query": "testing", 
       "fuzziness": 1 
      } 
     } 
    }, 
    "explain": true 
} 
' 
Смежные вопросы