2014-06-16 3 views
0

필드를 범위의 종류로 검색하려고합니다.SOLR : 알파벳 범위가있는 필드

A-C 
Sch-So 

Banana (B는 범위 AC에)에 대한 검색은 첫 번째 문서 및 School (모델명 : SCH에 대한 검색을 반환 schould 일치 : 정확히 내가 같이 분야의 요소가 될하려면 Sch-So)는 두 번째 문서를 전달해야합니다. Salat은 위의 것을 반환하지 않아야합니다.

하나의 문서에 여러 개의 값과 범위가있을 수 있으므로 더 복잡하게 만들려면 다음을 수행 할 수도 있습니다. 아무것도 A의 시작을 별도로가 E로 시작하는 경우

A, E-G 
C, F, U 
Sch-So, Pi-Re 

그래서이 첫번째 기간이 발견되어야 함을 의미한다, F 또는 G가 검색된다.

이것을 달성 할 가능성이 있습니까?

답변

1

색인을 생성하기 전에 문서를 사전 처리해야합니다. Solr에서 'banana'와 'a-c'를 비교할 방법이 없기 때문입니다. 인덱스 시간에 토큰 스트림에 토큰을 주입하는 사용자 정의 tokenizer으로 시작해야합니다. 귀하의 예에 따르면,이 토큰 화자는 'a', 'b'및 'c'를 'a - c'라는 용어에 대한 토큰 스트림에 주입합니다.

그런 다음 쿼리 용어에 대해 solr.EdgeNGramFilterFactory 분석기를 사용하여 필드를 구성합니다. 필터가 만들 N 그램 (예 : side="front", minGramSize="1"maxGramSize="3"부터 시작)을 제어 할 수 있습니다. 이것은 기본적으로 검색 용어 '바나나'를 여러 용어 'b', 'ba'및 'ban'로 변환합니다.

쿼리 용어 'school'은 n-grams ','sc ','sch '가되고 따라서'school '은 인덱스에서'sch '을 찾습니다.

쿼리 용어 'salat'은 n-grams, 'sa', sal '등을 초래하므로'salat '은 인덱스에서'sch '과 일치하지 않습니다.

+0

답장을 보내 주셔서 감사합니다. 작동하는 것처럼 들립니다. 나는 길을 걷고 있기 때문에 다음 주에 이것을 시험 할 수 있지만, 나는 그 때 피드백을 줄 것이다. – DanielG

+0

이제 테스트 할 시간이 있었고, 내가 원하는대로 거의 작동했습니다. 당신이 인덱스 "Sch-So"를 "Sch, Sci, Scj ... Shz, Sd, Se, ... So"로 분할해야하기 때문에 약간 조정을해야했습니다. 도움을 다시 주셔서 감사합니다! – DanielG