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"}})