0

我使用弹性搜索来搜索新闻文章。如果我搜索“弗拉米迪尔·普京”,它会起作用,因为他经常出现在新闻中,而弗拉米迪尔和普京都不是很受欢迎。但是,如果我搜索“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"]}}})
4

1 回答 1

2

您可以使用弹性搜索的match_phrase选项

但是您不能提及多个字段进行搜索,而是使用 _all 字段

您的查询将是
res = es.search(index="article-index", fields="url", body={"query": "match_phrase": {"_all":"keywordstr"}})

于 2014-04-01T14:43:17.250 回答