ElasticSearch: попытка получить предложение по написанию имен собственных

Прежде чем я начну, позвольте мне просто сказать, что я не эксперт по 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?


person Cari    schedule 11.04.2015    source источник


Ответы (1)


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

person Cari    schedule 14.04.2015