2016-08-25 2 views
3

Вот мои настройки:Синоним анализатор не работает

{ 
"countries": { 
"aliases": {}, 
"mappings": { 
    "country": { 
    "properties": { 
     "countryName": { 
     "type": "string" 
     } 
    } 
    } 
}, 
"settings": { 
    "index": { 
    "creation_date": "1472140045116", 
    "analysis": { 
     "filter": { 
     "synonym": { 
      "ignore_case": "true", 
      "type": "synonym", 
      "synonyms_path": "synonym.txt" 
     } 
     }, 
     "analyzer": { 
     "synonym": { 
      "filter": [ 
      "synonym" 
      ], 
      "tokenizer": "whitespace" 
     } 
     } 
    }, 
    "number_of_shards": "5", 
    "number_of_replicas": "1", 
    "uuid": "7-fKyD9aR2eG3BwUNdadXA", 
    "version": { 
     "created": "2030599" 
    } 
    } 
}, 
"warmers": {} 
} 
} 

Мой synonym.txt файл находится в папке config внутри главного elasticsearch папки.

Вот мой запрос:

query: { 
    query_string: { 
     fields: ["countryName"], 
     default_operator: "AND", 
     query: searchInput, 
     analyzer: "synonym" 
     } 
    } 

Слова в synonym.txt являются: нас, патент США, сша.

Так что это не сработает. Интересно, что поиск работает нормально, за исключением, когда я ввожу любое из слов в файл synonym.txt. Так, например, когда я обычно печатаю нас в поиске, я бы получил результаты. С этим анализатором нас ничего мне не дает.

Я сделал close и open для моего ES-сервера, и все равно он не работает.

РЕДАКТИРОВАТЬ

Пример document:

{ 
    "_index": "countries", 
    "_type": "country", 
    "_id": "57aabeb80057405968de152b", 
    "_score": 1, 
    "_source": { 
     "countryName": "United States" 
    } 

Пример searchInput (это идет от переднего конца):

united states

РЕДАКТИРОВАТЬ # 2:

Вот мой обновленный индекс конфигурационный файл:

{ 
"countries": { 
    "aliases": {}, 
    "mappings": {}, 
    "settings": { 
     "index": { 
      "number_of_shards": "5", 
      "creation_date": "1472219634083", 
      "analysis": { 
       "filter": { 
        "synonym": { 
         "ignore_case": "true", 
         "type": "synonym", 
         "synonyms_path": "synonym.txt" 
        } 
       }, 
       "analyzer": { 
        "synonym": { 
         "filter": [ 
          "synonym" 
         ], 
         "tokenizer": "whitespace" 
        } 
       } 
      }, 
      "country": { 
       "properties": { 
        "countryName": { 
         "type": "string", 
         "analyzer": "synonym" 
        }, 
        "number_of_replicas": "1", 
        "uuid": "50ZwpIVFTqeD_rJxlmd59Q", 
        "version": { 
         "created": "2030599" 
        } 
       } 
      }, 
      "warmers": {} 
     } 
    } 
} 
} 

При попытке добавления документов, и делать поиск на указанных документов, то synonym анализатор не работает для меня.

EDIT # 3

Вот 2 документа в индексе:

{ 
"took": 3, 
"timed_out": false, 
"_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
}, 
"hits": { 
    "total": 2, 
    "max_score": 1, 
    "hits": [{ 
     "_index": "stocks", 
     "_type": "stock", 
     "_id": "2", 
     "_score": 1, 
     "_source": { 
      "countryName": "United States" 
     } 
    }, { 
     "_index": "stocks", 
     "_type": "stock", 
     "_id": "1", 
     "_score": 1, 
     "_source": { 
      "countryName": "Canada" 
     } 
    }] 
} 
} 
+0

Можете ли вы создать более полный пример? Вам не хватает данных и тестовых данных. –

+0

Хорошо. Я добавил сопоставление с одним из полей в моем индексе 'country',' countryName'. – MonkeyOnARock

+0

Что такое значение 'searchInput' и укажите пример документа, который у вас есть в вашем индексе. –

ответ

1

Вы близки, но я предлагаю читать полностью this section from the documentation, чтобы лучше понять эту функциональность.

В качестве решения:

PUT /countries 
{ 
    "mappings": { 
    "country": { 
     "properties": { 
     "countryName": { 
      "type": "string", 
      "analyzer": "synonym" 
     } 
     } 
    } 
    }, 
    "settings": { 
    "analysis": { 
     "filter": { 
     "synonym": { 
      "ignore_case": "true", 
      "type": "synonym", 
      "synonyms_path": "synonym.txt" 
     } 
     }, 
     "analyzer": { 
     "synonym": { 
      "filter": [ 
      "lowercase", 
      "synonym" 
      ], 
      "tokenizer": "whitespace" 
     } 
     } 
    } 
    } 
} 

Вам необходимо удалить индекс и создать его снова с вышеупомянутым отображением. Затем используйте этот запрос:

"query": { 
    "query_string": { 
     "fields": [ 
     "countryName" 
     ], 
     "default_operator": "AND", 
     "query": "united states" 
    } 
    } 
+0

Я пробовал в течение нескольких часов, чтобы получить «анализатор»: «Синоним» добавлен как поле, но это меня не позволяет. Я получаю эту ошибку: '' type ":" mapper_parsing_exception ",' '' reason ":" analyzer [synoynm] не найден для поля [countryName] "' – MonkeyOnARock

+0

Вы использовали точный код? –

+0

Вам также нужно отбросить начальный индекс, создать новый с новыми настройками и сопоставлениями и переиндексировать документы. –

0

уничтожал/создали индекс после нажатия TXT вы?

Я думаю, вы должны удалить "synonyms": "", если вы используете "synonyms_path"

+0

Я просто попытался удалить/создать индекс, и у меня все еще есть точные проблемы из моего исходного сообщения. – MonkeyOnARock

+0

У вас есть как «синонимы», так и «синонимы» в вашем сопоставлении? –