0

ElasticSearch를 처음 접했고 조건부 쿼리/필터를 구성 할 수있는 방법이 있는지 궁금합니다. 나는 레일스와 함께 일하고 있는데, ES 레벨에서 조건부 쿼리를 가리키는 것을 찾을 수 없었기 때문에 특정 레벨에 있어야한다고 생각한다. 그리고 나는 단지 가정하는 것이 어리 석다는 것을 확신한다! ElasticSearch 5.x (elasticsearch-rails/elasticsearch-model)에 대한 조건부 쿼리

그래서 여기 내가 가지고있는 (일) 쿼리입니다 :

search_definition = { 
     query: { 
      bool: { 
       must: [ 
        { 
         more_like_this: { 
          fields: tag_types, 
          docs: [ 
           { 
            _index: self.class.index_name, 
            _type: self.class.document_type, 
            _id: id 
           } 
          ], 
          min_term_freq: 1 
         } 
        } 
       ], 
       should: [ 
        range: { 
         age: { 
          gte: min_age, 
          lte: max_age, 
          boost: 4.0 
         } 
        } 
       ], 
       filter: { 
        bool: { 
         must: [ 
          term: { 
           active: true 
          } 
         ], 
         must: [ 
          geo_distance: { 
           distance: xdistance, 
           unit: "km", 
           location: { 
            lat: xlat, 
            lon: xlng 
           }, 
           boost: 5.0 
          } 
         ] 
        } 
       } 
      } 
     }, 
     size: how_many 
    } 

그리고 그것은 완벽하게 잘 작동합니다. 이제 추가 필터를 적용하고 싶다고 가정 해 보겠습니다.이 특정 예에서는 검색하는 사용자가 언제 다른 사용자가 실제로 검색중인 사용자에 대한 성별을 찾고 있는지 확인해야합니다. 이것은 데이터베이스의 2 가지 부울 속성 (남성/여성)에서 유지됩니다. 두 개의 유사한 필터를 준비하는 것만 큼 간단 할 것입니다. 그러나 쿼리에 적용되는 조건부 필터가 몇 개 더 있으며, 결국에는 미리 준비된 필터가 10 개 이상 있습니다. 더 우아한 방법이 있어야합니다! 고맙습니다!

답변

1

탄성 검색에 익숙합니까? search templates?
검색 템플릿을 사용하면 conditionaldynamic 개의 검색어를 사용할 수 있습니다. 예를 들어 필드 및 값 목록을 사용하여 조건 필터를 수행하고 검색 템플릿에 매개 변수로 전달할 수 있습니다.

+0

이것은 실제로 흥미로운 것 같습니다. 어제 JBuilder를 레일즈에 설치하기 시작했고, 다소 시간이 걸리기 때문에 나이가 들었습니다. 그래서 나는 당분간 그것을 지키고 앞으로 템플릿을 계속 탐색 할 것입니다. 다른 누군가는 이것을 읽을 수도 있습니다. 복잡해 짐 JBuilder가 반드시 즐거운 도구 일 필요는 없습니다! –

1

모하마드 (Mohammad)가 제안한 것처럼 결국 나는 ES 검색 템플릿을 사용하여 내 인생을 훨씬 쉽게 만들어주었습니다. JBuilder, ElasticSearch-DSL 및 기타 솔루션의 문제점은 최신 ES에서 작동하지 않는 것처럼 보이고 이후에 보석이나 ES 버전에 대한 변경 사항이있는 곳이 어디인지 궁금합니다. 따라서 중급 남자를 잘라 내고 실제로 생성하기 쉬운 슈퍼 템플릿을 완벽하게 제어하는 ​​것은 나에게 많은 의미를 가졌습니다. JBuilder와 ES-DSL로 설정 한 버전은 제대로 출력되지 않아 제대로 작동하지 않았습니다.

검색 템플릿 ->More Information

제이빌더 ->More Information

ElasticSearch-DSL ->More Information

가 나는 시도하지 않은 다른 솔루션이 있지만, 검색 템플릿, I didn를 ' 그럴 필요는 없습니다.