색인에 일부 문서가 있다고 가정 해 봅니다. 필드 중 하나가 URL입니다. 뭔가 ...문자열 부분에 패싯 사용
{"Url": "Server1/Some/Path/A.doc"},
{"Url": "Server1/Some/OtherPath/B.doc"},
{"Url": "Server1/Some/C.doc"},
{"Url": "Server2/A.doc"},
{"Url": "Server2/Some/Path/B.doc"}
내 검색 결과에 대한 경로로 개수를 추출하려고합니다. 이것은 아마도 분기 별 쿼리 일 것입니다.
예 :
Initial query:
Server1: 3
Server2: 2
Server1 Query:
Some: 3
Server1/Some Query:
Path: 1
OtherPath: 1
가 지금은 광범위하게이 접근하는 두 가지 방법을 볼 수 있습니다 내가 하나의 큰 팬이 아니에요.
옵션 1 : 스크립팅. mvel은 수학 연산 (적어도 문서에서 문자열 분할을 찾을 수 없음)으로 제한되는 것 같습니다. 이렇게하면 Java에 있어야합니다. 그것은 가능하지만 레코드가 많으면 오버 헤드가 많이 나는 것처럼 느껴집니다.
옵션 2 : 문서와 함께 경로 부분을 저장 ...
{"Url": ..., "Parts": ["1|Server1","2|Some","3|Path"]},
{"Url": ..., "Parts": ["1|Server1","2|Some","3|OtherPath"]},
{"Url": ..., "Parts": ["1|Server1","2|Some"]},
{"Url": ..., "Parts": ["1|Server2"]},
{"Url": ..., "Parts": ["1|Server2","2|Some","3|Path"]}
내가 좋아하는 뭔가를 할 수있는이 방법. Urls starting with 'Server1/Some', facet on parts starting with 3|
. 이것은 너무 심하게 hackish 느낀다.
어떻게해야할까요? 필자는 필요한만큼 많은 사전 처리 작업을 수행 할 수 있지만 중요한 쿼리 결과의 수이므로 ES에서 오는 카운트가 필요합니다. 당신이 원하는 때 /a
, /a/b
, /a/b/c
편집
:
괜찮 았지 만, 서버 당 카운트를 얻고 싶다면 내가 필요로하는 다중 값 중 어느 것이 있는지 알지 못하기 때문에 그렇게 할 방법이 없습니다. _entire_ 인덱스 만 덤프하면됩니다. 가기. 따라서 내 'Parts'제안에 카운터를 추가했습니다. – Basic
전처리가 필요하다고 생각하지 마십시오. [경로 계층 토큰 화 프로그램] (http://www.elasticsearch.org/guide/reference/index-modules/analysis)을 사용하십시오./pathhierarchy-tokenizer /)를 사용하면 인덱싱 된 토큰과 동일한 결과를 얻을 수 있습니다. – javanna
@Basic 잘 모르겠다. 특정 서버뿐만 아니라 모든 서버에 대해 두 번째 레벨을 얻길 원하십니까? 어쩌면보십시오 [여기에서] (http://www.springyweb.com/2012/01/hierarchical-faceting-with-elastic.html). – javanna