Прежде чем я начну, позвольте мне просто сказать, что я не эксперт по ElasticSearch, но в настоящее время мне поручено настроить некоторые анализаторы, чтобы предложения по правописанию работали лучше в нескольких различных ситуациях. Я видел примеры людей, которые предлагают варианты правописания для имен собственных, поэтому я знаю, что это должно быть возможно, но я занимаюсь этим уже пару дней и, должно быть, что-то упускаю, потому что ElasticSearch не кажется узнать имя, которое я ищу. Не могли бы вы помочь мне понять это? Заранее спасибо!
Вот анализатор, который я использую как для индексации, так и для поиска:
"full_text": {
"filter": [
"lowercase",
"asciifolding",
],
"type": "custom",
"tokenizer": "keyword"
},
Это должно продемонстрировать, что поле токенизируется в одно длинное ключевое слово, которое мне нужно.
{
"query": {
"match": {
"_all": "combine 5"
}
},
"script_fields": {
"terms" : {
"script": "doc[field].values",
"params": {
"field": "my_field"
}
}
}
}
... и он выводит что-то вроде этого, которое показывает, как токенизируется поле. Выглядит неплохо:
"took": 7,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 75,
"max_score": 0.58574116,
"hits": [
{
"_index": "my_index",
"_type": "thing",
"_id": "1",
"_score": 0.58574116,
"fields": {
"terms": [
[
"combine 5"
]
]
}
}
}
}
... но когда я делаю запрос на предложение, он не предлагает поле, даже если оно просто отключено пробелом.
{
"query": {
"match": {
"_all": "combine 5"
}
},
"suggest": {
"suggest-0": {
"term": {
"field": "_all",
"size": 5
},
"text": "combine5"
}
}
}
Который возвращает кучу документов и это предложение:
"suggest": {
"suggest-0": [
{
"text": "combine5",
"offset": 0,
"length": 8,
"options": [
{
"text": "combined",
"score": 0.875,
"freq": 15
},
{
"text": "combine",
"score": 0.85714287,
"freq": 17
}
]
}
]
}
Обратите внимание, что если я изменю подсказку по правописанию, чтобы она работала только с полем, содержащим текст, она предлагает его, но не тогда, когда я использую _all. Есть ли способ получить слова в определенном поле, которые будут предлагаться при предложении против _all?