2016-08-22 4 views
1

Я новичок в ELasticsearch и нуждаюсь в вашей помощи относительно ES, возвращающего непревзойденные результаты для анализируемого поля. у меня есть собственный анализатор следующим образом:Elasticsearch возвращает непревзойденные результаты

"analyzer": { 
      "testing_analyzer": { 
       "type": "custom", 
       "char_filter": "html_strip", 
       "tokenizer": "standard", 
       "filter": [ 
        "lowercase", 
        "asciifolding", 
        "snowball", 
        "stop" 
       ] 
      }, 
      "testing_search_analyzer": { 
       "type": "custom", 
       "char_filter": "html_strip", 
       "tokenizer": "standard", 
       "filter": [ 
        "lowercase", 
        "asciifolding" 
       ] 
      } 
     } 

я поставил этот анализатор для поля на обоих индекса & поиска следующим образом.

"name": 
{ 
"type": "string", 
"analyzer": "testing_analyzer", 
"search_analyzer": "testing_search_analyzer" 
} 

но когда поиск имен «Università ди болонья», это вернуть первый результат запись имеет такой же матч, но и некоторые другие записи не совпадают (вторая запись в результате ниже):

Record1:

[ "Università di Bologna", "University of Bologna", "CNR", "Università di Pisa", "University of Pisa", "Mineraria e Delle Tecnologie Ambientali" ] 

Record2:

[ "University of Salerno", "Università di Salerno" ] 

Запрос:

{ 
    "fields": [ 
     "doc_id", 
     "name" 
    ], 
    "query": { 
     "match": { 
     "name": "Università di bologna" 
     } 
    } 
} 

любая помощь?!

+0

как определено 'testing_search_analyzer'? – keety

+0

"testing_search_analyzer": { "типа": "пользовательские", "char_filter": "html_strip", "токенизатор": "стандартный", "фильтр": [ "нижний регистр", "asciifolding"] } , – Telebh

+0

Вы тоже можете показать запрос? – keety

ответ

1

Результаты ожидаются. По умолчанию в запросе соответствия используется «OR» токенов, генерируемых tokenizer.

Попробуйте изменить запрос следующим образом:

{ 
    "fields": [ 
     "doc_id", 
     "name" 
    ], 
    "query": { 
     "match": { 
     "name": { 
      "query": "Università di bologna", 
      "operator": "and" 
     } 
     } 
    } 
} 
+0

он работал после добавления оператора« и »в соответствии с инструкциями !!! Спасибо большое. Кстати, почему без добавления оператора «и» некоторые записи, которые не имеют точного поискового запроса, имели более высокий балл, чем те, у которых есть точное совпадение? – Telebh

+0

попробуйте включить [пояснить] (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-explain.html), он может намекнуть, почему это может происходить – keety

+0

, также если ответ был helpfu do upvote & accept thanks :) – keety

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