#elasticsearch #lucene
#elasticsearch #lucene
Вопрос:
У меня есть запись json в эластичном поиске с полями
"streetName": "5 Street",
"name": ["Shivam Apartments"]
Я попробовал приведенный ниже запрос, но он ничего не возвращает, если я добавлю StreetName bool в запрос
{
"query": {
"bool": {
"must": [
{
"bool": {
"must": {
"match": {
"name": {
"query": "shivam apartments",
"minimum_should_match": "80%"
}
}
}
}
},
{
"bool": {
"must": {
"match": {
"streetName": {
"query": "5 street",
"minimum_should_match": "80%"
}
}
}
}
}
]
}
}
}
Сопоставление документов
{
"rabc_documents": {
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "autocomplete_analyzer",
"position_increment_gap": 0
},
"streetName": {
"type": "keyword"
}
}
}
}
}
Комментарии:
1. Не могли бы вы, пожалуйста, добавить сопоставление документов также в описание?
2. Я попробовал то же самое, используя динамическое отображение, и у меня это сработало. Высока вероятность того, что ваше сопоставление определено таким образом, что оно сделает этот конкретный документ недоступным для поиска с использованием используемого вами запроса.
3. @SahilGupta Я добавил сопоставление документа
4. @Gibbs .) N-Граммовый токенизатор б.) Фильтры символов нижнего регистра, ascii-свертки, обрезки, апострофа и стоп-слов с.) Фильтры символов Html_strip
5. @Gibbs Повлияет ли это на предложение поля StreetName?
Ответ №1:
На основе документации E.S (ключевые слова в Elastic Search)
- «Поля ключевых слов доступны для поиска только по их точному значению».
- Наряду с этим ключевые слова также чувствительны к регистру.
Принимая во внимание вышеупомянутое:
- Поиск «5 street» не будет соответствовать «5 Street» (‘s’ vs ‘S’) в поле ключевого слова
- minimum_should_match не будет работать с полем ключевого слова.
Предложение: Для частичных совпадений используйте сопоставление «текст» вместо «ключевого слова». Ключевые слова предназначены для фильтрации, агрегирования на основе термина и т.д.
Комментарии:
1. Также можно использовать нормализатор.