2014-03-27 112 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個單詞:( –