2016-05-18 4 views
1

У меня есть такой заводной сценарий:Elasticsearch: _SCORE всегда 0 для ТФ()

_index[field][term].tf() 

Я индексировать этот заводной сценарий

POST /_scripts/groovy/getTF 
{ 
    "script": "_index[field][term].tf()" 
} 

Затем, выполнив следующий запрос всегда возвращает _SCORE быть ноль (команда определения)

POST /my_index/document/_search 
{ 
    "query": { 
    "function_score": { 
     "query": { 
     "match": { 
      "text": "algorithms" 
     } 
     }, 
     "functions": [ 
     { 
      "script_score": { 
      "script_id": "getTF", 
      "lang" : "groovy", 
      "params": { 
       "term": "algorithms", 
       "field": "text" 
      } 
      } 
     } 
     ], 
     "boost_mode": "replace" 
    } 
    }, 
    "size": 10, 
    "fields": ["text"] 
} 

Что я здесь делаю неправильно?

Это отображение для полей

PUT /ap_dataset/document/_mapping 
{ 
    "document": { 
    "properties": { 
     "docno": { 
     "type": "string", 
     "store": true, 
     "index": "not_analyzed" 
     }, 
     "text": { 
     "type": "string", 
     "store": true, 
     "index": "analyzed", 
     "term_vector": "with_positions_offsets_payloads", 
     "analyzer": "my_english" 
     } 
    } 
    } 
} 
+0

Можете ли вы поделиться содержимым поля 'text' одного из документов, который соответствует? Кроме того, отображение этого поля? –

+0

@AndreiStefan Добавлены сопоставления. Также «текст» - большой абзац. Я не совсем уверен в том, чтобы поделиться им. Но есть ли условия, которые я ищу в приведенном выше сообщении? –

+0

Вы уверены, что документы имеют этот термин в них в этом поле? Как вы это проверили? –

ответ

0

Объяснение 0 термин частоты является то, что этот термин вы ищете не найден в индексе. Ваш скрипт получает термин под названием algorithms (который является множественным числом).

Но анализатор english меняет множественное число на единицу, в результате использования английского стеблемера. Таким образом, даже если ваш текст содержит algorithms, термин в индексе algorithm, который не найден _index['text']['algorithms'].

+0

Исправить. Когда я ищу только алгоритм. Я получаю правильный результат. –

+0

Большое спасибо @AndreiStefan –

+0

Не беспокойтесь, это было весело и смущает. Я считал само собой разумеющимся, что анализатор не может больше изменить термин «алгоритмы». Ну, анализатор 'english' может. –