Elastic搜索更多重量以精确匹配
我使用弹性搜索进行新闻文章搜索。如果我搜索“弗拉马迪尔·普京”,它会起作用,因为他经常出现在新闻中,而弗拉米迪尔和普京都不是很受欢迎。但如果我搜索“Raja Ram”,它就不起作用了。我有一些关于“Raja Ram”的文章,但也有一些关于“Raja Mohanty”和“Ram Srivastava”的文章。这些文章的排名高于引用“Raja Ram”的文章。我的标记器或搜索功能是否有问题Elastic搜索更多重量以精确匹配,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我使用弹性搜索进行新闻文章搜索。如果我搜索“弗拉马迪尔·普京”,它会起作用,因为他经常出现在新闻中,而弗拉米迪尔和普京都不是很受欢迎。但如果我搜索“Raja Ram”,它就不起作用了。我有一些关于“Raja Ram”的文章,但也有一些关于“Raja Mohanty”和“Ram Srivastava”的文章。这些文章的排名高于引用“Raja Ram”的文章。我的标记器或搜索功能是否有问题 es.indices.create( index="article-index
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"]}}})
您可以使用elasticsearch的选项
但是你不能提及多个搜索字段,而是使用所有字段
您的查询将是res=es.search(index=“article index”,fields=“url”,body={“query”:“match\u phrase”:{“\u all”:“keywordstr”}})它起作用了,但它只对精确匹配起作用。在搜索“abc”时,如果有“abc”,那就太好了,否则,搜索索引应该更重视“abc”和“bc”,而不是“A”或“B”。如何实现这一点?首先使用querystring和and运算符查询BC。这将为您提供所有三种可能的结果。1.匹配A B C的短语,2。A和B或B和C或C和A。A、B或C。从这些结果中,你可以过滤掉每个结果,并相应地提高它们。如果我们处理10个单词,那么太混乱了:(