我遇到了 Lucene 的问题,我希望有人能给我一个想法,我做错了什么。
我正在使用 lucene 4.4,并且正在使用 StandardAnalyser。我正在尝试在一个字段上进行搜索,但我得到了一个奇怪的结果。
例如,当我搜索单词“gros*”时,结果返回带有“grossesse”的记录。这很好,正如预期的那样。但是当我用“gross*”搜索时,它什么也没找到。
知道我做错了什么吗?有没有我缺少的设置?任何帮助或想法将不胜感激。
谢谢
这是我的索引
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;