2012-01-24 3 views
0

"John Doe"라는 용어를 검색 할 때 "John", "Doe"또는 "John Doe"와 일치 할 수 있도록 공백으로 검색 쿼리를 분할 할 때, 전체 쿼리 만이 아니라 이것이 내가 지금하고있는 방법입니다.공백으로 Lucene QueryString을 분할하는 가장 효과적인 방법

BooleanQuery booleanQuery = new BooleanQuery(); 
String[] terms = queryString.split(" "); 
for(String term : terms) { 
    booleanQuery.add(new FuzzyQuery(new Term("firstName", term)), BooleanClause.Occur.SHOULD); 
    booleanQuery.add(new FuzzyQuery(new Term("lastName", term)), BooleanClause.Occur.SHOULD); 
} 

저에게이 접근 방식은 조금 엉망입니다. 더 좋은 방법이 있습니까?

+0

왜 QueryParser를 사용하지 않습니까? – milan

+0

예 QueryParser 및 WhiteSpaceAnalyzer를 사용합니다 (공백에만 분할하려는 경우) – naresh

+0

John과 같은 부분적인 단어와 일치 할 수 있기를 원하기 때문에 퍼지와 함께 부울 쿼리를 사용했습니다. QueryParser 및 WhiteSpaceAnalyzer가이 작업을 수행 할 수 있습니까? – ryandlf

답변

0

간단한 분석기를 사용하지 않는 경우 쿼리 구문 분석기가 잘못되었습니다. You should analyze query terms the same way they were analyzed at indexing time.

당신이하려고하는 것에 따라 아마도 당신은 당신의 분석기로 당신의 쿼리 문자열을 나눠야 할 것입니다. 그것은 필수 아니지만, 그렇게하지 않으면 (예를 들어, 당신은 공백에 분할하고 독립적으로 모든 단어를 분석 할 수 있음), 일부 (사소) 문제를 해결해야합니다

  • 무엇을 할 때 분석 단어의 몇 가지 용어 (화합물 이름과 함께 일어날 수 있음)?
  • 단어가 정지 단어 일 때 수행 할 작업 (토큰을 생성하지 않음)?
관련 문제