2014-04-23 4 views
1

Elasticsearch에서 중첩 된 다중 필드 속성을 정렬하는 동안 문제가 발생했습니다. 두 개의 다중 필드 중 하나가 작동하고 다른 하나는 모든 값에 대해 null을 반환합니다.Elasticsearch - 중첩 된 멀티 필드로 정렬

내 정렬 분석기 :

"analyzer": { 
     "sortable": { 
      "type": "custom", 
      "tokenizer": "keyword", 
      "filter": ["lowercase"] 
     } 
    } 

매핑 :

{ 
    "doc": { 
     "properties": { 
      "id" : { 
       "type": "long" 
      }, 
      "name": { 
       "type": "string", 
       "index": "analyzed", 
       "analyzer": "snowball", 
       "fields": { 
        "sortable": { 
         "type": "string", 
         "analyzer": "sortable" 
        } 
       } 
      }, 
      "website": { 
       "type": "nested", 
       "properties": { 
        "domain": { 
         "type": "string", 
         "analyzer": "snowball", 
         "fields": { 
          "sortable": { 
           "type": "string", 
           "analyzer": "sortable" 
          } 
         } 
        }, 
        "created": { 
         "type": "date" 
        } 
       } 
      } 
     } 
    } 
} 

전체 작업 예 here이다. 하단의 네 가지 검색에 유의하십시오. name 또는 name.sortable을 기준으로 정렬하면 결과의 정렬 섹션에 값이 표시됩니다. website.domain을 기준으로 정렬하면 정렬 섹션에 값이 표시되지만 website.domain.sortable은 항상 null을 표시합니다.

저는 여기서 바보 같은 짓을하고 싶습니다.하지만 내 인생에서 나는 무엇을 볼 수 없습니다. 이것은 Elasticsearch 1.1.0에 있습니다. 기꺼이 대안 솔루션을 사용하겠습니다. 비록 두 개의 다른 이름으로 필드를 두 번 두드리는 것을 싫어합니다.

답변

1

중첩 된 문서 유형에 대한 정렬을위한 경로가 필요합니다. http://sense.qbox.io/gist/0d05fcf12be64e4a924a6b010ffe55e72d91b147

+1

그래도 실제로 적용 되나요? 중첩 된 유형 자체가 아니라 중첩 된 유형 아래의 문자열 유형에 "필드"를 추가합니다. 그리고 검색은 두 분야에서 모두 가능합니다. 검색 용어를 "mydomain-com"으로 변경하면 스노우 볼 분석 필드 (website.domain)는 "mydomain"또는 "com"과 일치하지만 sortable 필드 (website.domain.sortable)는 전체 텍스트 " mydomain-com ". 새로운 샘플 http://sense.qbox.io/gist/cc801f831b45075463ee160146aea279419d0505 그리고 기꺼이 sense.qbox.io를 사용하면 훨씬 쉽게 작업 할 수 있습니다. – Jafoy

+0

당신은 절대적으로 옳았습니다. 나는 중첩 된 필터가 존재하지 않았기 때문에 잘못된 결론을 내 렸습니다. 나는 지금 그것을 조사하고있다. 매우 이상한 –

+0

혼란을 가져 주어서 불편을 끼쳐 드려 죄송합니다. –

관련 문제