Сопоставления в файле Elastic Search

Я использую эластичный поиск для автозаполнения, а также для исправления орфографических ошибок. У меня есть это сопоставление для моего поля (для автозаполнения).

    **Mapping:**

      "name": {
                "type": "text",
                "analyzer": "autocomplete"
              }

Теперь я хочу реализовать подсказку фразы в этом поле. Когда я использую это, он дает неправильный результат. Думаю, это из-за существующего сопоставления.

    **POST XYZ/_search**

    {
      "suggest": {
        "text": "ipone 16",
        "simple_phrase": {
          "phrase": {
            "field": "name",
            "highlight": {
              "pre_tag": "<em>",
              "post_tag": "</em>"
            }
          }
        }
      }
    }

    **Results:**
      "options": [
              {
                "text": "i ip ipo iphon iphone 1 16",
                "highlighted": "i ip ipo <em>iphon iphone</em> 1 16",
                "score": 1.6111489e-8
              },
              {
                "text": "i ip ipo iphon iphon 1 16",
                "highlighted": "i ip ipo <em>iphon iphon</em> 1 16",
                "score": 1.4219211e-8
              },
              {
                "text": "i ip ipo ipho iphone 1 16",
                "highlighted": "i ip ipo <em>ipho iphone</em> 1 16",
                "score": 1.3510152e-8
              },
              {
                "text": "i ip ipo ipho iphon 1 16",
                "highlighted": "i ip ipo <em>ipho iphon</em> 1 16",
                "score": 1.1923397e-8
              },
              {
                "text": "i ip ipo iron iphone 1 16",
                "highlighted": "i ip ipo <em>iron iphone</em> 1 16",
                "score": 6.443544e-9
              }
            ]

    **From the document i should use this for phrase suggester.**

    "mappings": {
        "test": {
          "properties": {
            "title": {
              "type": "text",
              "fields": {
                "trigram": {
                  "type": "text",
                  "analyzer": "trigram"
                },
                "reverse": {
                  "type": "text",
                  "analyzer": "reverse"
                }
              }
            }
          }

**How can i use two different mapping on same filed?**

person RedHead_121    schedule 15.05.2017    source источник


Ответы (2)


  • Поскольку ваши результаты не токенизированы должным образом, проблема может быть в вашем анализаторе aurocomplete. укажите свой _settings, чтобы увидеть определение для ваших анализаторов.

  • Сделайте свой запрос на name.trigram.

  • После решения этой проблемы хорошо обрезать результат с помощью collate.
person Mohammad Mazraeh    schedule 15.05.2017
comment
Я добавил этот параметр в новое поле. Как я могу использовать подсказку фраз для прогнозирования слов с ошибками? name_suggest: { тип: текст, поля: { реверс: { тип: текст, анализатор: реверс }, триграмма: { тип: текст, анализатор: триграмма } } } - person RedHead_121; 16.05.2017

Вы можете написать такой запрос. Предоставьте выходные данные для этого запроса.
Также хорошо иметь свои trigram analyzer настройки (токенизатор, сопоставитель символов и фильтр токенов).

{
   "suggest": {
      "text": "noble prize",
      "simple_phrase": {
         "phrase": {
            "field": "name_suggest.trigram",
            "size": 1,
            "gram_size": 3,
            "direct_generator": [
               {
                  "field": "name_suggest.trigram",
                  "suggest_mode": "always"
               }
            ],
             "collate": {
               "query": {
                  "inline": {
                     "match": {
                        "title": "{{suggestion}}"
                     }
                  }
               },
               "prune": true
            },
            "highlight": {
               "pre_tag": "<em>",
               "post_tag": "</em>"
            }
         }
      }
   }
}
person Mohammad Mazraeh    schedule 20.05.2017