Невозможно получить правильный результат от эластичного поиска на основе запроса и токенизации документа - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь реализовать поисковую систему, в которой мне нужно использовать Edge NGRAM Tokenizer.Настройки для создания индекса показаны ниже.Я использовал один и тот же токенизатор как для документов, так и для поисковых запросов.(Документы написаны на перизанском языке)

PUT /test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "autocomplete": {
          "tokenizer": "autocomplete",
          "filter": [
            "lowercase"
          ]
        },
        "autocomplete_search": {
          "tokenizer": "autocomplete"
        }
      },
      "tokenizer": {
        "autocomplete": {
          "type": "edge-ngram",
          "min_gram": 2,
          "max_gram": 10,
          "token_chars": [
            "letter"
          ]
        }
      }
    }
  },
  "mappings": {
    "_doc": {
      "properties": {
        "title": {
          "type": "text",
          "analyzer": "autocomplete",
          "search_analyzer": "autocomplete_search"
        }
      }
    }
  }
}

Проблема проявляется, когда я получаю 0 результатов (результатов) из поискового запроса 'آلمانی' в документах, а у меня есть документ с данными: 'آلمان خوباست '.

Как вы можете видеть, результат анализа термина «آلمانی» показывает, что он генерирует токен «ملمان» и работает правильно.

{
  "tokens" : [
    {
      "token" : "آ",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "آل",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "آلم",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "آلما",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "آلمان",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "آلمانی",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 0
    }
  ]
}

Поисковый запрос показан нижеполучает 0 хитов.

GET /test/_search
{
  "query": {"match": {
    "title": {"query": "آلمانی" , "operator": "and"}
  }}
}

Однако поисковый термин 'آلما' возвращает документ с данными 'آلمان خوب است'.Как я могу решить эту проблему?

Ваша помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 20 января 2019

Я нашел этот пост DevTicks Рикардо Хека, который решил мою проблему. введите ссылку для более подробного описания

Я изменил настройки отображения следующим образом:

    "mappings": {
    "_doc": {
      "properties": {
        "title": {
          "type": "text",
          "analyzer": "autocomplete",
          "search_analyzer": "autocomplete_search",
          "fields": {
            "ngram": {
              "type": "text",
              "analyzer": "autocomplete"
            }
          }
        }
      }
    }
  }

И теперь я получаю документ "آلمان خوب است", выполнив поиск по термину"آلمانی".

...