2012-09-21 2 views
1

필자는 하나의 "사용자"유형에 "사용자"라는 매우 기본적인 색인을 가지고 있으며, 여기에는 여러 필드가 있습니다. 나는 색인 외에 정의 된 것이 아무것도 없다.일반 쿼리 문자열 외에도 ElasticSearch에서 접두사 검색을 수행하려면 어떻게해야합니까?

내가해야할 일은 접두어 일치를 사용자 이름에 우선 순위로 지정하고 사용자의 약력 및 웹 사이트에서 다른 성냥을 포함하고 다른 입력란과 부분 일치를 포함하는 자동 완성 결과를 제공하는 것입니다.

쿼리 DSL로 어떻게 이것을 수행합니까?

+0

@javanna 확실히 아직 테스트하지는 않았지만 유용 할 것으로 확신합니다. – samuraisam

답변

5

원하는 것을 성취하기위한 여러 가지 방법이 있습니다. 전 접두사를 일치시키는 방식에 달려 있다고 말할 수 있습니다. Prefix Query을 사용하거나 EdgeNGrams을 사용자 입력란에서 빼고 접두사 쿼리없이 검색 할 수 있습니다. 첫 번째 옵션은 조금 느리고 두 번째 옵션은 더 많은 용어 (ngrams)를 색인하기 때문에 색인 크기가 증가합니다.

접두어 쿼리를 결정하면 다른 쿼리를 함께 사용해야합니다. bool query을 사용하면됩니다. 일치해야하는 검색어와 일치해야하는 검색어 (선택 사항 인 경우)를 결정하면됩니다. 접두어 일치가 예를 들어 더 중요하다는 것을 나타 내기 위해 각 쿼리를 향상시킬 수도 있습니다. 당신이 인덱스 EdgeNGrams하기로 결정하는 경우 반면에

, 단일 query string를 사용하고 이런 그들에게 서로 다른 가중치를 부여 다른 필드에 검색 할 수 있습니다

{ 
    "query" : { 
     "query_string" : { 
      "fields" : "user.ngrams^3 field1^2 field2", 
      "query" : "query" 
     } 
    } 
} 

또한 고려해야 할 쿼리 문자열을 사용하면 여러 용어 (부울 쿼리가 생성 됨)를 검색하고 lucene query syntax을 사용할 수 있습니다. 또한 접두사 쿼리가 아닌 동안 쿼리 문자열이 분석됩니다. 그것은 모두 당신이 필요로하고 그 기능이 당신의 유스 케이스에 유용한지 여부에 달려 있습니다.

자세한 정보가 필요한 경우 알려주십시오.

관련 문제