2015-08-27 6 views
1

Прямо сейчас мой поиск дает мне нежелательные результаты при поиске, скажем, для «яйца». я получаю следующее:Более высокий балл за первое слово в ElasticSearch

_score: 2.7645843 
_source: 
    django_id: "18003" 
    text: "Bagels, egg" 
    content_auto: "Bagels, egg" 
    django_ct: "web.fooddes" 
    allergies: [] 
    outdated: false 
    id: "web.fooddes.18003" 
_explanation: 
    value: 2.7645843 
    description: "weight(_all:egg in 516) [PerFieldSimilarity], result of:" 
    details: 
    - value: 2.7645843 
    description: "fieldWeight in 516, product of:" 
    details: 
    - value: 1.4142135 
     description: "tf(freq=2.0), with freq of:" 
     details: 
     - value: 2.0 
     description: "termFreq=2.0" 
    - value: 5.21295 
     description: "idf(docFreq=26, maxDocs=1824)" 
    - value: 0.375 
     description: "fieldNorm(doc=516)" 

в качестве первого результата.

И только пятая или даже дальше хотел один:

_score: 2.380459 
_source: 
    django_id: "01124" 
    text: "Egg, white, raw, fresh" 
    content_auto: "Egg, white, raw, fresh" 
    django_ct: "web.fooddes" 
    allergies: [] 
    outdated: false 
    id: "web.fooddes.01124" 
_explanation: 
    value: 2.3804593 
    description: "weight(_all:egg in 1489) [PerFieldSimilarity], result of:" 
    details: 
    - value: 2.3804593 
    description: "score(doc=1489,freq=2.0), product of:" 
    details: 
    - value: 0.99999994 
     description: "queryWeight, product of:" 
     details: 
     - value: 5.386365 
     description: "idf(docFreq=22, maxDocs=1848)" 
     - value: 0.18565395 
     description: "queryNorm" 
    - value: 2.3804595 
     description: "fieldWeight in 1489, product of:" 
     details: 
     - value: 1.4142135 
     description: "tf(freq=2.0), with freq of:" 
     details: 
     - value: 2.0 
      description: "termFreq=2.0" 
     - value: 5.386365 
     description: "idf(docFreq=22, maxDocs=1848)" 
     - value: 0.3125 
     description: "fieldNorm(doc=1489)" 

Это происходит потому, что первый результат имеет меньше слов в нем, и, следовательно, результат имеет более высокий балл, потому что «яйцо» является более актуальным в этом дело.

Однако я хочу, чтобы первое слово, встречающееся в результате, было самым важным. Поэтому, если я ищу слово «яйцо», он должен в первую очередь показать те результаты, которые начинаются с этого слова. Есть идеи, как это реализовать?

ответ

1

Приобретено благодаря людям в https://discuss.elastic.co.

"query": { 
     "bool": { 
     "must": { "match": { "_all": request_text }}, 
     "should": 
     { 
      "span_first" : { 
      "match" : { 
       "span_term" : { "_all" : request_text } 
      }, 
      "end" : 1 
      } 
     } 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^