문제

현재 사이트 검색에 Lucene 2.1.0을 사용하고 있는데 다음과 같은 어려운 문제에 직면했습니다.타겟 검색 중에 인덱스 필드 중 하나가 무시되고 있습니다.다음은 색인의 문서에 필드를 추가하는 코드입니다.

// Add market_local to index
contactDocument.add(
    new Field(
        "market_local"
        , StringUtils.objectToString(
            currClip.get(
                "market_local"
            )
        )
        , Field.Store.YES
        , Field.Index.UN_TOKENIZED 
    )
);

인덱스에 대해 쿼리( * )를 실행하면 다음 결과가 반환됩니다.

Result 1:
    title: Foo Bar
    market_local: Local

Result 2:
    title: Bar Foo
    market_local: National

타겟 쿼리 실행:

+( market_local:Local )

아무런 결과도 찾지 못할 것입니다.

저는 이것이 매우 구체적인 질문이라는 것을 알고 있습니다. 저는 Lucene 초보자이기 때문에 이 문제 디버깅을 어디서 시작해야 하는지에 대한 정보를 얻으려고 노력하고 있습니다.


업데이트

Luke를 설치하고 최신 색인을 확인 중입니다...필드 시장_지역 검색에서 사용할 수 있으므로 다음과 같이 실행하면:

market_local:Local

검색이 올바르게 작동합니다(Luke에서는).이제 분석기 코드를 검토하겠습니다. 검색 응용 프로그램이 Lucene 2.1.0을 사용하고 Luke의 최신 버전이 2.3.0을 사용하고 있다는 사실을 이 문제로 분류할 수 있는 방법이 있습니까?

도움이 되었습니까?

해결책

Lucene 디버깅을 위해 사용하는 가장 좋은 도구는 다음과 같습니다. 루크, 색인 자체를 탐색하여 색인이 생성된 항목을 확인하고 검색 등을 수행할 수 있습니다.다운로드하여 색인을 가리키고 거기에 무엇이 있는지 확인하는 것이 좋습니다.

다른 팁

그만큼 "왜 조회수가 나오지 않나요?" 섹션을 참조하세요. Lucene FAQ에는 유용할 수 있는 몇 가지 제안이 있습니다.Field.Index.UN_TOKENIZED를 사용하고 있으므로 인덱싱에 분석기가 사용되지 않습니다.검색할 때 분석기를 사용하는 경우 이것이 문제의 근본 원인일 수 있습니다. 올바른 조회수를 얻으려면 분석기 인덱싱 및 검색이 동일해야 합니다.

또 다른 간단한 방법은 디버거나 로깅 문을 사용하여 값을 확인하는 것입니다.

StringUtils.objectToString(currClip.get("market_local"))

그것이 당신이 생각하는 것과 일치하는지 확인하기 위해.

Luke는 Lucene과 함께 번들로 제공되지만 Luke에게 다른 버전의 Lucene을 사용하도록 지시할 수 있습니다."lucene-core-2.1.0.jar"에는 사용하려는 Lucene 2.1.0이 포함되어 있고 "luke.jar"에는 Lucene 2.3.0이 포함된 Luke가 포함되어 있다고 가정해 보겠습니다.그런 다음 다음 명령을 사용하여 Luke를 시작할 수 있습니다.

자바 -classpath lucene-core-2.1.0.jar;luke.jar org.getopt.luke.Luke

(비결은 클래스 경로에서 Luke보다 Lucene 버전을 먼저 배치하는 것입니다.또한 이것은 Windows에 있습니다.유닉스에서 교체 ";" 와 함께 ":".)

Luke에서 확인할 수 있듯이,

+( 시장_로컬:로컬 )

다음에 다시 작성됩니다.

market_local:로컬

만약에 Query 객체의 rewrite(IndexReader) 메소드 호출됩니다.두 쿼리는 동일해야 하므로 2.1에 버그가 있을 수 있습니다.2.1을 사용해야 하는 경우 Query 개체를 IndexSearcher에 전달하기 전에 해당 메서드를 수동으로 호출해 볼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top