#elasticsearch #lucene #aws-elasticsearch
#elasticsearch #lucene #aws-elasticsearch
Вопрос:
При использовании simple_query_string у меня возникает своеобразное поведение выделения, возникающее при использовании simple_query_string с любым маркером (обычный, унифицированный, fvh)
-
Основные моменты работают, когда в простой строке запроса используются термины (не фразы): работает, когда используются только термины
-
Выделения перестают работать, когда вы закрываете цитаты, фактически превращая обычную встречу в фразу: не работает вообще при поиске по фразе
-
Но если я добавлю значение, превышающее 0, к ранее не работающей фразе, она снова будет работать нормально, хотя и с неправильным набором результатов, поскольку я не хотел, чтобы результаты были ошибочными: работает нормально, если я ошибаюсь, однако
При использовании прямых запросов API ключ выделения полностью исчезает в результате при поиске фразы с нулевым значением slop (или значение slop не определено, что приводит к поведению на втором шаге выше.
Я также попытался переопределить запрос выделения, с той же проблемой. Вот запрос, который я использую в этих примерах, я также напрямую воспроизвел это поведение с помощью жестко запрограммированных строк и вызовов API:
"query": {
"simple_query_string": {
"query": query,
"fields": ["title", "content"]
}
},
"highlight": {
"fields": {
"title": {},
"content": {}
}
}
Рассматриваемое поле (заголовок, содержимое) для выделения имеет следующие сопоставления:
"properties" : {
"content" : {
"type" : "text",
"fields" : {
"autosuggest" : {
"type" : "text",
"analyzer" : "autosuggest_analyzer",
"search_analyzer" : "ngram_search_analyzer"
},
"delimiter" : {
"type" : "text",
"index_options" : "offsets",
"analyzer" : "universal_delimiter_analyzer"
},
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
},
"lang" : {
"type" : "text",
"analyzer" : "universal"
},
"synonyms" : {
"type" : "text",
"analyzer" : "synonyms"
}
},
"analyzer" : "standard",
"index_prefixes" : {
"min_chars" : 1,
"max_chars" : 12
},
"index_phrases" : true
},
"title" : {
"type" : "text",
"fields" : {
"autosuggest" : {
"type" : "text",
"analyzer" : "autosuggest_analyzer",
"search_analyzer" : "ngram_search_analyzer"
},
"delimiter" : {
"type" : "text",
"index_options" : "offsets",
"analyzer" : "universal_delimiter_analyzer"
},
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
},
"lang" : {
"type" : "text",
"analyzer" : "universal"
},
"synonyms" : {
"type" : "text",
"analyzer" : "synonyms"
}
},
"analyzer" : "standard",
"index_prefixes" : {
"min_chars" : 1,
"max_chars" : 12
},
"index_phrases" : true
},
...
Наконец, вот информация о версии:
"version" : {
"number" : "7.9.0",
"build_flavor" : "oss",
"build_type" : "rpm",
"build_hash" : "a479a2a7fce0389512d6a9361301708b92dff667",
"build_date" : "2020-08-11T21:36:48.204330Z",
"build_snapshot" : false,
"lucene_version" : "8.6.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
Кто-нибудь когда-нибудь сталкивался с этим? Есть ли что-то явно очевидное, чего мне здесь не хватает? Это сбивает с толку, поскольку оно отлично работает с slop, но в противном случае даже не возвращает запись выделения в результате. Ни один другой вопрос / решение, которое я видел на сегодняшний день, похоже, не имеет отношения к этой проблеме.
Комментарии:
1. Я могу воспроизвести поведение, описанное выше. Хотелось бы посмотреть, есть ли хорошее объяснение того, что может здесь происходить.