2014-03-25 3 views
0

elasticsearch를 사용하여 특정 필드에서 자동 완성 검색을 수행하는 데 ngram 분석기를 사용하고 있습니다. 기본적으로 쿼리 내에서 "size : 10"을 사용하여 결과가 10 개로 반환되도록 설정했습니다. "fl" 가 반환됩니다 : "flake", "flower", "fleet", "flank", "flatter"elasticsearch에서 반환 한 결과 수를 줄입니다

는하지만 내가 원하는 내 검색이 정확히 일치에 가까워로 검색하면, 탄성 검색에 의해 반환되는 결과를 예를 를 들어

을 감소해야한다는 것입니다.

검색하는 경우 : "fla" 반환 : "flan","flank", "flatter"

검색하는 경우 : "flan" 반환 할 내용 : "flan","flank"

지금 내가 검색 한 경우에도 모든 결과가 반환됩니다. "flan" 음성 검색도 사용하고 있습니다. 데이터는 (데이터 언어가 바로 영어 인 경우에만)

사용자 정의 분석기를 사용하여 다국어없는 경우

+0

데이터가 다국어입니까? –

답변

1

이 답변이 적용됩니다. 모든 경우에 기본 분석기가되도록하려면 분석기 이름을 기본값 인 (myAnalyzer 대신)으로 설정할 수 있습니다.

index : 
analysis : 
    analyzer : 
     myAnalyzer : 
      type : custom 
      tokenizer : whitespace 
      filter : [word_filter, lowercase, stop] 
    filter : 
     word_filter : 
      type : word_delimiter 
      split_on_numerics : false 
      generate_word_parts : false 
      generate_number_parts : false 
      split_on_case_change : false 
      preserve_original : false 

추신 : 변경 한 후에 색인을 만들고 전체 데이터를 다시 색인해야합니다.

+0

감사합니다. – Soumya

0

대기 시간을 상당히 줄이는 한 가지 방법은 ungram을 min_gram으로 사용하는 대신에 digram 또는 trigrams를 사용하는 것입니다. 그렇지 않으면 사용자가 단일 문자 (예 : 'a')를 입력하면 데이터베이스에서 수십만 개의 결과가 표시 될 수 있습니다. 이는 사용자에게 '원격으로 관련성이 없습니다'(매우 비효율적 인) 경우도 있습니다.

당신은 필터의 종류를 사용할 수 있습니다

{ 

"filter": 
{ 
      "autocomplete_filter": { 
       "type":  "edge_ngram", 
       "min_gram": 3, 
       "max_gram": 20 
      } 
    } 

} 

이 크게 소프트웨어의 효율성을 향상시킬 무관 한 사람을 제거하여 결과의 ​​수를 줄일 수 있습니다.

자세한 내용은 this 페이지를 확인하십시오.

더 나은 제안을하려면 this으로 이동하는 것이 좋습니다. 이렇게하면 주어진 쿼리 (원하는대로)에 따라 결과가 제한 될뿐만 아니라 소프트웨어의 효율성도 상당히 향상됩니다!

관련 문제