Близость-релевантность в elasticsearch

#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)

  • «Поля ключевых слов доступны для поиска только по их точному значению».
  • Наряду с этим ключевые слова также чувствительны к регистру.

Принимая во внимание вышеупомянутое:

  1. Поиск «5 street» не будет соответствовать «5 Street» (‘s’ vs ‘S’) в поле ключевого слова
  2. minimum_should_match не будет работать с полем ключевого слова.

Предложение: Для частичных совпадений используйте сопоставление «текст» вместо «ключевого слова». Ключевые слова предназначены для фильтрации, агрегирования на основе термина и т.д.

Комментарии:

1. Также можно использовать нормализатор.