Lucene에 문제가 있습니다. 누군가 내가 잘못하고있는 생각을 나에게 줄 수 있기를 바랍니다.Lucene이 예상 데이터를 찾지 못했습니다.
저는 lucene 4.4를 사용하고 있으며 StandardAnalyser를 사용하고 있습니다. 한 필드에서 검색을 시도하고 있지만 이상한 결과가 나타납니다.
예를 들어 "gros *"단어를 검색하면 "grossesse"가 포함 된 결과가 반환됩니다. 이것은 잘되고 예상대로입니다. 그러나 "총체적으로"검색하면 아무 것도 발견되지 않습니다.
내가 뭘 잘못하고 있는지 아는 사람이 있습니까? 내가 누락 된 설정이 있습니까? 도움이나 의견을 보내 주시면 감사하겠습니다.
감사
이 내 인덱스
private void createIndex(Analyzer analyzer, String catalogueId, Locale locale, Directory index) throws IOException {
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_44, analyzer);
IndexWriter w = new IndexWriter(index, config);
Document doc = null;
for (ProduitCatalogue produitCatalogue : produitCataloguesMap.get(catalogueId + locale.getLanguage()).values()) {
doc = new Document();
doc.add(new IntField("id", produitCatalogue.getId(), Store.YES));
TextField desc = new TextField("description", produitCatalogue.getDescription(), Store.YES);
doc.add(desc);
w.addDocument(doc);
}
w.close();
}
}
이 내 createQuery입니다
private Query createQuery(String searchTxt, Analyzer analyzer) throws ParseException {
QueryParser queryParser = new QueryParser(Version.LUCENE_44, "description", analyzer);
queryParser.setAllowLeadingWildcard(true);
queryParser.setAutoGeneratePhraseQueries(false);
Query q = queryParser.parse(searchTxt);
return q;
}
이 내 분석이다
Analyzer analyzer = englishAnalyzer;
if (Locale.CANADA_FRENCH.getLanguage().equals(locale.getLanguage())) {
analyzer = frenchAnalyzer;
}
Query q = createQuery(searchTxt, analyzer);
DirectoryReader reader = DirectoryReader.open(indexMap.get(catalogueId + locale.getLanguage()));
IndexSearcher searcher = new IndexSearcher(reader);
TopScoreDocCollector collector = TopScoreDocCollector.create(HITS_PER_PAGE, true);
searcher.search(q, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;