2016-05-31 2 views
2

난 그냥 최대 절전 모드 검색을 기반으로 전체 텍스트 검색 엔진을 구현했습니다.최대 절전 모드 검색으로 UTF-8 문자를 무시하고 검색

하나의 문제에 대한 해결책을 찾고 있습니다. 나는 "zażółć gęślą jaźń"와 같이 폴란드어 (UTF-8) 문자로 된 텍스트를 가지고 있습니다. "jaźń"을 검색 할 때 모든 것이 정상이며 결과가 발견됩니다. 그러나 "jazn"을 검색 할 때 결과를 찾을 수 없습니다.

"jaźń", "jazń", "jaźn"및 "jazn"과 같은 가능한 모든 단어를 검색하고 "zażółć gęślą jaźń"텍스트를 찾으십시오. 그렇게하기 위해 Hibernate Search를 어떻게 구성 할 수 있습니까?

답변

6

인덱싱/쿼리하기 전에 텍스트를 분석하기 위해 분석기를 정의해야합니다. section 4.3

문제를 해결하려면

분석기에 최대 절전 모드 검색 문서 section 1.8을 참조 및 분석에 대한 완전한 정보는 사용자가 정의하는 분석기에 비 ASCII 문자를 변환하는 ASCIIFoldingFilter을 포함해야 자신의 가장 가까운 ASCII 코드입니다 (아마 LowerCaseFilter도 가능). See this example

최대 절전 모드 검색 DSL을 사용하여 쿼리를 작성하는 경우 자동으로 완료됩니다. 주식 Lucene을 사용하여 쿼리를 작성하는 경우 an example here을 사용하면 분석기가 필드에 자동으로 바인딩됩니다.

와일드 카드 쿼리는 기본적으로 분석되지 않으므로 와일드 카드를 사용하는 경우 쿼리에 전달하기 전에 문자열을 정리해야합니다.

와일드 카드 here에 대한 쿼리를 삭제하는 방법의 예를 볼 수 있습니다.

this sort of code 아래에는 ASCIIFoldingFilter가 사용됩니다.

+0

감사합니다. 그러나 이것은 내가 생각하는 색인 ​​절차만을 포함 할 것입니다. 그래서 나는 색인에 "zazolc gesla jazn"을 가질 것이다. 그리고 지금 "jaźń"으로 검색 할 때 작동할까요? 아니면 어떻게 든 검색어를 미리 만들어야합니까? –

+0

답변을 완료했습니다. 지금 모든 포인터가 있어야합니다. –

+0

고마워요! 나는 최대 절전 모드 검색을 위해 [Querydsl]을 사용하고있다. (https://github.com/querydsl/querydsl/tree/master/querydsl-hibernate-search) ASCIIFoldingFilter를 어떻게 사용할 지 모르겠다. 아마도 준비 할 필요가있을 것이다. Querydsl에 보내기 전에 검색 용어를 사용 하시겠습니까? –