2012-11-20 2 views
0

"페이지"가 ​​들어있는 ElasticSearch 데이터베이스가 있습니다.특정 ID와 일치하는 경우 Tire의 쿼리 결과를 강조 표시 하시겠습니까?

class Page 
    field :domain_id 
    field :page_id 
    field :title 
    field :description 
    field :filetype 
    field :content 
end 

각 페이지의 도메인 ID가 있습니다. 모든 쿼리에서 특정 도메인의 결과를 높이고 싶습니다. 따라서 X의 domain_id와 일치하면 정적으로 설정되어 반환되는 모든 검색 결과에서 더 관련성이 높아집니다.

두 번째로, 예를 들어 콘텐츠와 일치하는 것보다 높은 관련성을 가진 제목이나 설명과 일치하는 텍스트 (여러 단어가 될 수 있음)를 기반으로 향상시키고 싶습니다.

나는 현재 타이어 젬에 다음 쿼리를 가지고있다.

query { text :_all, search_term } 

위의 두 가지 작업을 수행하려면 어떻게해야합니까? 사용자가 "title : policy manuals"을 입력하면 (분명히 따옴표 제외) 어떻게 영향을 미칩니 까?

답변

1

Custom Filters Score Query과 domain_id가 일치하는 필터를 사용하면 첫 번째 문제를 해결할 수 있습니다. 두 번째 문제는 각 필드를 개별적으로 검색하고 적절한 부스트 인자를 적용하여 해결할 수 있습니다. 예를 참조 (

{ 
    "custom_filters_score": { 
    "query": { 
     "bool": { 
     "should": [ 
      { 
      "text": { 
       "title": "SEARCH_TERM", 
       "boost": 2 
      } 
      }, 
      { 
      "text": { 
       "description": "SEARCH_TERM", 
       "boost": 2 
      } 
      }, 
      { 
      "text": { 
       "content": "SEARCH_TERM", 
       "boost": 1 
      } 
      } 
     ] 
     } 
    }, 
    "filters": [ 
     { 
     "filter": { "term": {"domain_id": "X"}}, 
     "boost": 3 
     } 
    ] 
    } 
} 
+0

그리고 당신도'query_string' 쿼리를 사용하여, 다른'should' 절을 추가 할 수 있습니다 [여기] (https://github.com/karmi/ : 모두 함께는 다음과 같이 보일 수 있습니다. rubygems.org/blob/search-steps/app/controllers/searches_controller.rb#L16-L17)), 사용자에게 Lucene 쿼리 구문을 노출합니다. – karmi