2014-03-27 3 views
0

나는 신제품 기사 검색을 위해 신축성있는 검색을 사용합니다. "Vlamadir Putin"을 검색하면 뉴스에 많이 올랐고 Vlamidir과 Putin은 그다지 인기가 없었기 때문에 작동합니다. 그러나 "Raja Ram"을 검색하면 작동하지 않습니다. 나는 "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

(

조회에
고해상도 = es.search 것 _all 필드를 사용하는 대신, 당신은 elasticsearch

match_phrase 옵션을 사용할 수 있습니다하지만 당신은 검색에 여러 필드를 언급하지 수

+0

정확히 일치하는 항목에 대해서만 작동했습니다. (예 : "index"= "기사 색인", fields = "url", body = { "검색어": "match_phrase": { "_all": "keywordstr"}} . "A B C"에 대한 검색의 경우 "A B C"가 있으면 좋을 것입니다. 그렇지 않으면 검색 색인이 "A"또는 "B"보다 "A B"및 "B C"를 더 중요하게 생각해야합니다. 어떻게해야할까요? –

+0

쿼리 문자열 및 AND 연산자를 사용하여 A B c에 대한 첫 번째 쿼리입니다. 이것은 세 가지 가능한 결과를 모두 줄 것입니다. 1. A B C, 2. A AND B 또는 B AND C 또는 C AND A. 3. A 또는 B 또는 C.이 결과에서 각 결과를 필터링하고 그에 따라 부스트 할 수 있습니다. – harsha

+1

10 단어로 처리하는 경우 너무 지저분합니다. ( –

관련 문제