2014-03-27 51 views
0

我使用弹性搜索新闻文章搜索。如果我搜索“Vlamadir Putin”,那么它很有用,因为他有很多新闻,Vlamidir和Putin都不是很受欢迎。但是,如果我搜索“拉贾拉姆”,它不起作用。我有一些“Raja Ram”的文章,但是有一些是“Raja Mohanty”和“Ram Srivastava”。这些文章的排名高于引用“Raja Ram”的文章。我的分词器或搜索功能有问题吗?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"]}}}) 

回答

2

您可以使用elasticsearch

match_phrase选项,但不能提到搜索多个字段,而是使用_all场

您所查询的是
解析度= es.search( index =“article-index”,fields =“url”,body = {“query”:“match_phrase”:{“_all”:“keywordstr”}})

+0

它工作正常, 。对于“A B C”的搜索,如果“A B C”存在,那应该是很棒的,否则,搜索索引应该比“A”或“B”更加重视“A B”和“B C”。我怎样才能做到这一点? –

+0

使用查询字符串和AND运算符的A B c的第一个查询。这会给你所有三个可能的结果。 1. A B C的匹配词,2. A和B或B以及C或C以及A. 3. A或B或C.从这些结果中,您可以筛选出每个结果并相应地提升它们。 – harsha

+1

太乱了,如果我们正在处理10个单词:( –