ElasticSearch больше веса для точного соответствия

Я использую эластичный поиск для поиска новостных статей. Если я буду искать "Владимира Путина", это сработает, потому что он много в новостях, а Владимир и Путин не очень популярны. Но если я ищу "Раджа Рам", это не работает. У меня есть несколько статей "Раджа Рам", но некоторые из "Раджа Моханти" и "Рам Шривастава". Эти статьи стоят выше, чем статьи, цитирующие "Раджа Рам". Что-то не так в моем токенизаторе или функциях поиска?

    es.indices.create(
            index="article-index",
            body={
                    'settings': {
                            'analysis': {
                                    'analyzer': {
                                            'my_ngram_analyzer' : {
                                                    'tokenizer' : 'my_ngram_tokenizer'
                                            }
                                    },
                                    'tokenizer' : {
                                            'my_ngram_tokenizer' : {
                                                    'type' : 'nGram',
                                                    'min_gram' : '1',
                                                    'max_gram' : '50'
                                            }
                                    }
                            }
                    }
            },
            # ignore already existing index
            ignore=400
    )

res = es.search(index="article-index", fields="url", body={"query": {"query_string": {"query": keywordstr, "fields": ["text", "title", "tags", "domain"]}}})

1 ответ

Вы можете использовать опцию match_phrase из эластичного поиска

Но вы не можете упомянуть несколько полей для поиска, вместо этого используйте поле _all

Ваш запрос будет
res = es.search(index="article-index", fields="url", body={"query": "match_phrase": {"_all":"keywordstr"}})

Другие вопросы по тегам