나는 내가 지금처럼 루씬과 색인 오전 필드가 단어는 구두점을 토큰 화하고 "not"를 무시하기 때문에 hungry, slightly
으로 끝납니다.루씬 분석기
인덱스를 index=Index.UN_TOKENIZED
으로 변경하면 인덱싱 된 용어는 예상대로 HUNGRY, SLIGHTLY_HUNGRY, and NOT_HUNGRY
입니다.
내 검색 API있는 Query
과 같이 구성한다 (1) "검색"방법 :
MultiFieldQueryParser parser = new MultiFieldQueryParser(Version.LUCENE_30, getSearchFields(), new StandardAnalyzer(Version.LUCENE_30));
parser.setDefaultOperater(QueryParser.AND_OPERATOR);
Query query = parser.parse(searchTerms);
이것은 검색을 처리하는 곳 "foo는"에 getSearchFields()
에 의해 반환되는 모든 필드를 검색의 SearchTerms = "foo는"하고, 또한 searchTerms가 검색 할 필드와 값을 지정합니다 (예 : "hungerState : HUNGRY")
내 문제는 후자의 시나리오입니다. 쿼리 파서가 StandardAnalyzer를 사용하기 때문에 hungerState:SLIGHTLY_HUNGRY
에 대한 검색은 hungerState:"slightly hungry"
으로 파싱되고 hungerState=NOT_HUNGRY
에 대한 검색은 hungerState=hungry
으로 파싱됩니다.
필드가 StandardAnalyzer를 사용하여 색인화 될 때 예기치 않은 결과가 발생합니다 (HUNGRY 및 NOT_HUNGRY 검색은 3 가지 값 모두에 대한 결과를 반환합니다). 필드가 UN_TOKENIZED로 인덱싱되면 쿼리 구문 분석기가 검색 문자열을 토큰 화하고 소문자로 만들기 때문에 결과가 표시되지 않습니다.
나는 심지어 KeywordAnalyzer
과 같은 색인 생성을 위해 분석기를 지정하려고 시도했지만 심지어는 전체 검색 문자열이 매번 StandardAnalyzer
으로 분석되기 때문에 아무런 효과가 없습니다.
모든 조언을 주시면 감사하겠습니다. 감사!
StandardAnalyzer가 다른 모든 필드에 적합하기 때문에 PerFieldAnalyzerWrapper가 꼭 필요한 항목입니다. – schmimd04