Lucene을 필드의 모든 용어를 단일 용어로 처리합니다.

StackOverflow https://stackoverflow.com/questions/606576

  •  03-07-2019
  •  | 
  •  

문제

내 Lucene 문서에는 회사 이름이 토큰 화 된 필드 "회사"가 있습니다. 응용 프로그램의 특정 부분에 대한 토큰 화가 필요합니다. 그러나이 쿼리를 위해서는 전체 회사 분야에 접두사를 만들 수 있어야합니다.

예시:

  • 내 브랜드
    • 나의
    • 상표
  • 브라만 농장
    • 브라만
    • 농장

"BRA"에 대한 정기적으로 쿼리는 BRA로 시작하는 용어가 있기 때문에 두 문서를 모두 반환합니다.
그러나 내가 원하는 결과는 첫 번째 용어가 BRA로 시작하기 때문에 마지막 항목 만 반환합니다.

제안이 있습니까?

도움이 되었습니까?

해결책

a 스패린 첫 번째 용어 만 검색하려면. SpanpositionRangeQuery에 의해 포장 된 SpanMultIterMqueryWrapper로 포장 된 접두사 :

<SpanPositionRangeQuery: spanPosRange(SpanMultiTermQueryWrapper(company:bra*), 0, 1)>

다른 팁

회사 이름이있는 다른 인덱스 필드를 만듭니다. ~ 아니다 토큰 화. 필요한 경우 토큰 화 된 회사 이름 필드 대신 해당 필드에서 검색하십시오.


빠른 검색을 원한다면 관심있는 기록에 직접 지적되는 인덱스 항목이 있어야합니다. 근접 데이터를 사용하여 레코드를 필터링하기 위해 할 수있는 것이있을 수 있지만 느리게됩니다. 나는 문제를 다음과 같이 본다 : 완전한 필드에 대한 "포함"쿼리를 어떻게 효율적으로 수행 할 수 있습니까?

"첫 번째 용어"필드 및 "나머지 용어"필드를 생성함으로써 인덱스 크기의 증가를 최소화 할 수 있습니다. 이것은 두 필드에서 첫 번째 용어의 복제를 제거합니다. "일반"쿼리의 경우이 필드 중 하나에서 쿼리 용어를 찾습니다. "STARTSWITH"쿼리의 경우 "첫 번째 용어"필드 만 검색합니다. 그러나 이것은 가치있는 것보다 더 많은 문제처럼 보입니다.

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