我正在努力将Lucene集成到我们的应用程序中。 Lucene目前正在工作,例如当我搜索“上传”并且文档中有一些名为“上传”的文本时,它可以工作,但是当我搜索“Uplo”时,它就不起作用了。有任何想法吗?
代码:
Directory directory = FSDirectory.open(path);
IndexReader indexReader = DirectoryReader.open(directory);
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
QueryParser queryParser = new QueryParser("contents", new SimpleAnalyzer());
Query query = queryParser.parse(text);
TopDocs topDocs = indexSearcher.search(query, 50);
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
org.apache.lucene.document.Document document = indexSearcher.doc(scoreDoc.doc);
objectIds.add(Integer.valueOf(document.get("id")));
System.out.println("");
System.out.println("id " + document.get("id"));
System.out.println("content " + document.get("contents"));
}
return objectIds;
谢谢。
答案 0 :(得分:2)
'上传'可能是您的Lucene索引中的一个令牌,其中令牌将是不可拆分的最小实体。如果你想匹配像'Uplo'这样的部分单词,那么最好选择Lucene NGram Indexing。请注意,如果您使用NGram索引,则倒排索引的空间要求会更高。
答案 1 :(得分:0)
您可以使用通配符搜索。
""单字符通配符搜索的符号和" *"多字符通配符搜索的符号(0个或更多字符)。
示例 - " Uplo *"
答案 2 :(得分:0)
更改
Query query = queryParser.parse(text);
到
Query query = queryParser.parse("*"+text+"*");
Lucene支持单个术语内的单个和多个字符通配符搜索(不在短语查询中)。
要执行单字符通配符搜索,请使用"?"符号
要执行多字符通配符搜索,请使用" *"符号
单字符通配符搜索会查找与替换的单个字符匹配的字词。例如,要搜索" text"或"测试"你可以使用搜索:
te?t
多字符通配符搜索会查找0个或更多字符。例如,要搜索测试,测试或测试人员,您可以使用搜索:
test*
您还可以在学期中使用通配符搜索。
te*t
注意:您不能使用*或?符号作为搜索的第一个字符。