2013-06-24 3 views
1

lucene의 분석기는 어떻게 작동하는지 파악하려고합니다. 제 질문은 lucene이 동의어를 어떻게 처리합니까? 여기 상황은 다음과 같습니다 foo는 = 바 멀티 단어 : 하나의 단어를 들어 foo는 바 = foobar와Lucene 동의어 필터 동작

:

  • 는 루씬의 색인 기록을 확장 하는가 우리는 하나의 단어 및 다중 단어

    하나가 안 그래? 쿼리에 "foo"와 같은 단어가 있으면 쿼리에 "bar"도 추가됩니다. 색인 생성 여부에 대해 알지 못합니까?

    • 는 루씬은 쿼리 및 인덱스를 모두 확장 하는가 : 멀티 단어를

    ? 예를 들어 "foo bar"가 있으면 인덱싱/쿼리에 foobar를 추가합니까?

두 번째 질문은 Lucene이 토큰 스트림을 사용하여이를 소문자 필터와 같은 필터에 제공한다는 것입니다. 제 질문은 lucene이 다중 단어를 어떻게 찾습니까? 어떻게 "foo bar"는 함께있는 다중 단어라는 것을 알 수 있습니까?

감사

답변

3

SynonymFilter은 선택적 (SynonymMap.Builder.add() 참조) 사실 keepOrig =를 설정하여,뿐만 아니라 tokenstream에 동의어를 원래의 단어를 유지하고 추가 할 수 있습니다. 이 동작으로 인해 PhraseQueries 등에서 문제가 발생할 수 있습니다. 문서의 참고를 먼저 참조하십시오.

쿼리 및 색인 생성에 동일한 Analyzer을 사용하는 경우 색인에 작성된 검색어와 문서는 모두 같은 방식으로 처리됩니다. SynonymFilterkeepOrig이 true로 설정된 것은 Analyzers 중 하나이며 쿼리와 인덱싱 간에는 부적절한 방식으로 적용되는 경우가 많습니다.하지만 이는 전적으로 귀하의 구현에 달려 있습니다.

구현 방법은 source code입니다.

+0

어떻게 여러 동의어가 처리됩니까? "New York"= "NY" wal mart = wal-mart = walmart 토큰별로 필터링 토큰을 사용하기 때문에. 어떻게 다중 단어 동의어를 찾았는지 모르겠다. –

+0

동작에 대해 혼란스러워하는 것이 있거나 구현이 토큰 스트림을 처리하는 방법을 알고 싶습니까? 후자는 소스 코드에 대한 링크를 제공 한 이유입니다. 전자의 경우, 주어진 위치에서 가장 길게 일치하는 것을 검색합니다 (즉, 'foo' ->'bar','foo bar' ->'foobar' 규칙이있는 경우'foo bar'가됩니다) '바 bar'가 아니라'foobar'). 나는 그것이'wal mart = wal-mart = walmart' (동의어 규칙은 하나의 입력과 하나의 출력을 가짐)과 같은 것을 지원한다고 믿지 않는다. 그것에 대해 물어보고 싶은 특정 것이 있으면 계속하십시오. – femtoRgon

+0

제 질문은 토큰 스트림을 처리하는 방법입니다. 왜냐하면 동의어 필터가 하나씩 토큰을 가져오고 상태가 덜한 것 같기 때문입니다. 예를 들어 현재 토큰이 "New"이면 다음 토큰이 "York"인지 여부를 확인하는 방법은 무엇입니까? –