2013-03-02 5 views
3

아마 나는 정말로 뭔가를 놓치고 있습니다.Lucene에서 "히트 (hit)"하는 필드를 검색하는 방법

Lucene에서 키/값 쌍을 색인화했습니다 (중요한 경우 v4.1). 내가 가진 key1 = value1 및 key2 = value2, 예 : 속성 파일에서 읽습니다.

특정 필드와 catchall "ALL"필드 모두에 색인이 생성됩니다.

new Field("key1", "value1", aFieldTypeMimickingKeywords); 
new Field("key2", "value2", aFieldTypeMimickingKeywords); 
new Field("ALL", "key1=value1", aFieldTypeMimickingKeywords); 
new Field("ALL", "key2=value2", aFieldTypeMimickingKeywords); 
// then get added to the Document of course... 

나는 다음

new WildcardQuery(new Term("ALL", "*alue1")); 

를 사용하여 와일드 카드 검색을 수행 할 수 있으며 히트를 찾을 수 있습니다.

하지만 '해당 값과 관련된 완전한 값 (예 :'key1 = value1 ')이 무엇 이었습니까?'와 같은 정보를 얻는 것이 좋습니다. "

문서를 가져온 다음 IndexableFields 목록을 가져온 다음 모든 항목을 반복하여 field.stringValue(). contains ("alue1")가 있는지 확인하는 것이 가장 좋습니다. (디버거의 데이터 구조를 볼 수 있으며 모든 정보가 있습니다.)

이것은 전혀 이상한 원인이 아니며 Lucene이 방금 수행 한 것? 조회수 정보가 일부 필드를 반환하면 안됩니까?

"명백한"기능처럼 보이지 않는 Lucene이 있습니까? Google과 API에서 시작하는 것은 간단하지 않은 것을 밝혀 내지 못했지만, 잘못된 정보를 찾아야 만하는 것처럼 느껴집니다.

+2

결과를 강조 표시 하시겠습니까? 여기에 예제 튜토리얼이 있습니다. http://hrycan.com/2009/10/25/lucene-highlighter-howto/ 당신의 목적이 강조 표시되지 않더라도, 나는 그 기술을 여전히 사용할 수 있다고 생각합니다. – phani

답변

5

IndexSearcher.explain() 메서드로 시도 할 수 있습니다. 일치하는 문서의 ID를 얻은 다음 (동일한 검색 키워드를 사용하여) 각 필드에 대한 쿼리를 준비하고 각 쿼리에 대해 Explanation.isMatch()을 호출하십시오. true를 반환하는 필드는 일치 필드를 제공합니다. 예 :

for (String field: fields){ 
    Query query = new WildcardQuery(new Term(field, "*alue1")); 
    Explanation ex = searcher.explain(query, docID); 
    if (ex.isMatch()){ 
     //Your query matched field 
    } 
} 
+0

Thanks , 나는 그것에게 시험을 줄 것이다 – user949300

+0

내가 원했던 것이 아니라 가장 좋은 대답. 그래서 그것을 받아 들일 것이다. – user949300

관련 문제