Elastic搜索更多重量以精确匹配

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

我使用弹性搜索进行新闻文章搜索。如果我搜索“弗拉马迪尔·普京”,它会起作用,因为他经常出现在新闻中,而弗拉米迪尔和普京都不是很受欢迎。但如果我搜索“Raja Ram”,它就不起作用了。我有一些关于“Raja Ram”的文章,但也有一些关于“Raja Mohanty”和“Ram Srivastava”的文章。这些文章的排名高于引用“Raja Ram”的文章。我的标记器或搜索功能是否有问题

    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个单词,那么太混乱了:(