2014-01-25 6 views
0

저는 Lucene을 사용하여 문서에서 읽은 문자열을 색인화합니다. 다른 필드에 문자열을 색인화해야하므로 독자 클래스를 사용하지 않습니다.Lucene에서 문자열을 색인화하는 방법은 무엇입니까?

document.add(new Field("FIELD1","string1", Field.Store.YES, Field.Index.UNTOKENIZED)); 
document.add(new Field("FIELD2","string2", Field.Store.YES, Field.Index.UNTOKENIZED)); 

이 인덱스를 구축하지만,

QueryParser queryParser = new QueryParser("FIELD1", new StandardAnalyzer()); 
Query query = queryParser.parse(searchString); 
Hits hits = indexSearcher.search(query); 
System.out.println("Number of hits: " + hits.length()); 

이 어떤 결과를 반환하지 않습니다 검색에서 작동합니다.

그러나 문장처럼,

document.add(new Field("FIELD1","This is sentence to be indexed", Field.Store.YES, Field.Index.TOKENIZED)); 

검색이 잘 작동 때 인덱스입니다.

감사합니다.

답변

1

토큰화할 때만 검색이 가능하기 때문에 Field.Index.TOKENIZED라는 단어가있는 필드의 매개 변수를 설정해야합니다. "string1"이라는 단어는 "string1"로 색인됩니다. 토큰 화가 없으면 전혀 인덱싱되지 않습니다.

사용이 :

document.add(new Field("FIELD1","string1", Field.Store.YES, Field.Index.TOKENIZED)); 
document.add(new Field("FIELD2","string2", Field.Store.YES, Field.Index.TOKENIZED)); 

당신이 인덱스에 여러 단어를 포함하는 문자열을 원하는 경우, 예를 들어, "두 단어"를 2 단어로 토큰 화하지 않고 하나의 검색 가능한 요소로 사용하려면 전체 문자열을 토큰으로 사용하는 색인 ​​생성 중에 KeywordAnalyzer를 사용해야하거나 최신 버전의 Lucene에서 StringField 개체를 사용할 수 있습니다.

관련 문제