2013-05-14 3 views
0

색인에 일부 문서가 있다고 가정 해 봅니다. 필드 중 하나가 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

편집

:

답변

0

/a/b/c

필드 url 입력 (사용 전처리) 값을 다중 값이 URL과 함께 문서를 감안할 때 특정 깊이의 경로에 카운트를 표시하는 부수적 인 경우 설명 된대로 여러 개의 다중 값 필드를 디자인 할 수 있습니다. 위. 각 필드는 특정 깊이를 나타냅니다.

ES 클라이언트는 패싯을 쿼리 할 깊이 (따라서 어떤 필드)를 결정하는 논리를 포함해야합니다.

그래도 데이터를 제어하지 않으면 해킹과 같은 느낌이 들지만 실제로는 많은 필드가 필요합니다.

+0

괜찮 았지 만, 서버 당 카운트를 얻고 싶다면 내가 필요로하는 다중 값 중 어느 것이 있는지 알지 못하기 때문에 그렇게 할 방법이 없습니다. _entire_ 인덱스 만 덤프하면됩니다. 가기. 따라서 내 'Parts'제안에 카운터를 추가했습니다. – Basic

+0

전처리가 필요하다고 생각하지 마십시오. [경로 계층 토큰 화 프로그램] (http://www.elasticsearch.org/guide/reference/index-modules/analysis)을 사용하십시오./pathhierarchy-tokenizer /)를 사용하면 인덱싱 된 토큰과 동일한 결과를 얻을 수 있습니다. – javanna

+1

@Basic 잘 모르겠다. 특정 서버뿐만 아니라 모든 서버에 대해 두 번째 레벨을 얻길 원하십니까? 어쩌면보십시오 [여기에서] (http://www.springyweb.com/2012/01/hierarchical-faceting-with-elastic.html). – javanna

관련 문제