У меня проблема с запросом с использованием match_phrase_prefix. P.ex допустим, у меня есть запись с display_name = "переполнение стека". Если я запрашиваю, используя «стек» или «стек», он найдет запись, но не если я попробую «стек o». Я заметил, что об этом спрашивали раньше, и проблема связана с префиксом, но, похоже, я не нашел правильного ответа. Какие-нибудь мысли?
Проблема с запросом match_phrase_prefix для эластичного поиска
comment
match_phrase_prefix должен возвращать документ со стеком o. Можете ли вы добавить свой полный запрос и сопоставление
- person jaspreet chahal   schedule 18.03.2020
comment
@jaspreetchahal К сожалению, мне не разрешено делиться исходным кодом. Лучшее, что я могу сделать, это поделиться этим: i.imgur.com/pmfI89V.png
- person fidans   schedule 19.03.2020
Ответы (1)
Он возвращает документы для stack o
, вы можете следовать приведенному ниже примеру, чтобы увидеть это.
Отображение индекса
{
"mappings": {
"properties": {
"display_name": {
"type": "text"
}
}
}
}
Указательный документ
{
"display_name" : "stack overflow"
}
Поисковый запрос
{
"query": {
"match_phrase_prefix" : {
"display_name" : {
"query" : "stack o"
}
}
}
}
И он возвращает проиндексированный выше документ
"hits": [
{
"_index": "so-60620921-match-prefix",
"_type": "_doc",
"_id": "1",
"_score": 0.5753642,
"_source": {
"display_name": "stack overflow"
}
}
]
Вы даже можете проверить пример официального документа ES, где он возвращает документ для quick brown f
.
person
user156327
schedule
18.03.2020
Помимо значения (в данном случае stack o), которое мне нужно преобразовать в нижний регистр, остальная часть кода в основном похожа, если не идентична. Проблема возникает только тогда, когда я пытаюсь ввести слово, за которым следует пробел, а затем одна буква (стек o, abc d и т. д.). Он отлично работает, когда добавляются другие буквы. Есть ли общий случай, когда это может произойти? потому что это кажется очень странной проблемой.
- person fidans; 19.03.2020
@fidans, извините, я вас не понял, это работает для
stack o
, которое представляет собой слово, за которым следует пробел, а затем одна буква
- person user156327; 19.03.2020
Приношу извинения за неудобства, но мне не разрешено делиться исходным кодом. Лучшее, что я могу сделать, это визуализировать два примера: 1: i.imgur.com/pmfI89V.png 2: i.imgur.com/yrA37re.png Полное отображаемое имя — «ali mokaj». . Первый случай не работает, а второй и любой другой работает.
- person fidans; 19.03.2020
@fidans, нам не нужен ваш исходный код для отладки проблемы, можете ли вы просто удалить еще один запрос термина для
id
, а также опубликовать документ, содержащий ali mokaj
? также ищите ответ в обоих случаях, как я указал в своем ответе
- person user156327; 19.03.2020
Документ зависит от этого идентификатора. Однако представляется, что проблема не является полностью последовательной. 1: i.imgur.com/wu7MoLp.png 2: i.imgur.com/Qn02SQn.png Первый случай аналогичен предыдущему примеру, поиск с помощью 'freskim a' не будет работа при поиске с 'freskim al' дала первый ответ (первая ссылка). Однако второй случай дал ответ, запросив «отобразить n» (вторая ссылка).
- person fidans; 19.03.2020
@fidans, спасибо, что следите за этим, но это выглядит странно, и важно знать ваше сопоставление индексов, не могли бы вы также поделиться этим, особенно с анализатором, примененным к вашему
display_search_field
- person user156327; 19.03.2020
@fidans, я пробовал со своим сопоставлением (приведенным в ответе) и тестировал как
freskim aliu
, так и display nejmgg
, и оба возвращают результат только с одним символом в конце.
- person user156327; 19.03.2020
@fidans, я только что еще раз посмотрел на ваши образцы, и вы делаете очень простые ошибки и смешиваете несколько вещей.
- person user156327; 19.03.2020
@fidans, пожалуйста, используйте сопоставление, предоставленное мной для ваших
display_search_field
, и переиндексируйте свои данные и сделайте правильный запрос, помните, что первый термин в вашем поисковом запросе должен быть полным, и только в последнем термине будет создан префиксный запрос.
- person user156327; 19.03.2020
@fidans, вы все еще сталкиваетесь с проблемой?
- person user156327; 20.03.2020
Извините за задержку ответа. У меня нет доступа к кибане, чтобы увидеть отображение индекса, но я свяжусь с DevOps. Кроме того, я не писал ни одного из запросов для этого, и мои знания об es очень ограничены, можете ли вы сказать мне, какие основные ошибки я сделал или микширование?
- person fidans; 20.03.2020
@fidans, спасибо за ответ, вы можете просто нажать
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-mapping.html
GET, чтобы увидеть подробности сопоставления. Также вы можете создать свой собственный индекс elasticsearch локально и использовать мое сопоставление и ваши образцы данных (заставьте нас использовать небольшие данные, чтобы меньше шансов смешивания) и протестировать его самостоятельно.
- person user156327; 21.03.2020
Давайте продолжим это обсуждение в чате.
- person user156327; 21.03.2020