проблема с запросом elasticsearch с ngram

у меня есть эти данные в моем индексе

https://gist.github.com/bitgandtter/6794d9b48ae914a3ac7c

Если вы заметили в отображении, я использую ngram с 3 токенов до 20.

когда я выполняю этот запрос:

GET /my_index/user/_search?search_type=dfs_query_then_fetch
{
  "query": {
    "filtered": { 
      "query":{
        "multi_match":{
          "query": "F",
          "fields": ["username","firstname","middlename","lastname"],
          "analyzer": "custom_search_analyzer"
        }
      }
    }
  }
}

Я должен получить 8 документов, которые я проиндексировал, но я получаю только 6, не считая двух с именами Франц и Фрэнсис. Я ожидаю, что эти два тоже будут, потому что они включены в данные. почему-то не работает.

когда я выполняю:

GET /my_index/user/_search?search_type=dfs_query_then_fetch
{
  "query": {
    "filtered": { 
      "query":{
        "multi_match":{
          "query": "Fran",
          "fields": ["username","firstname","middlename","lastname"],
          "analyzer": "custom_search_analyzer"
        }
      }
    }
  }
}

Я получаю эти два документа.

Если я уменьшу ngram, чтобы начать с 1, я получу все документы, но я думаю, что это повлияет на производительность запроса.

Чего мне здесь не хватает. Заранее спасибо.

ПРИМЕЧАНИЕ: все примеры закодированы с использованием смысла


person bitgandtter    schedule 14.04.2015    source источник


Ответы (1)


Это ожидаемо, так как min_gram указан как 3, это будет означать, что минимальная длина токена, созданного пользовательским анализатором, составляет 3 кодовых точки.

Следовательно, первым токеном для «Франца Сильвы» будет «Фра». Следовательно, токен «F» не будет соответствовать этому документу.

Можно протестировать токены, созданные анализатором, используя:

curl -Xget "http://<server>/index_name/_analyze?analyzer=custom_analyzer&text=Franz Silva"

Также обратите внимание, поскольку указанный выше "custom_analyzer" не указывает "token_chars", токены могут содержать пробелы.

person keety    schedule 15.04.2015
comment
если я изменю размер ngram, например, от 1 до 20, он покажет больше данных, потому что каждая буква будет отображаться почти в документах, есть ли какой-нибудь обходной путь, который я могу построить, чтобы исправить это? - person bitgandtter; 17.04.2015