Java Lucene通配符startwith或同等值

Java Lucene通配符startwith或同等值,java,lucene,wildcard,Java,Lucene,Wildcard,搜索'car*'我想找到'cars'和'car'。实际上,'car'没有找到,我想是因为'car'不是以'car'开头,而是同一个词 我找到的解决方法是找到“car或car*”,有更好的方法吗 下面是代码(实际上,'car'就是一个例子,我要找的真正的单词是'epatite'): final QueryParser QueryParser=newqueryparser(“全文”,new StandardAnalyzer()); 最终索引reader=DirectoryReader.open(索引

搜索
'car*'
我想找到
'cars'
'car'
。实际上,
'car'
没有找到,我想是因为
'car'
不是以
'car'
开头,而是同一个词

我找到的解决方法是找到
“car或car*”
,有更好的方法吗

下面是代码(实际上,
'car'
就是一个例子,我要找的真正的单词是
'epatite'
):

final QueryParser QueryParser=newqueryparser(“全文”,new StandardAnalyzer());
最终索引reader=DirectoryReader.open(索引);
最终索引搜索器搜索器=新索引搜索器(读卡器);
查询q1=queryParser.parse(“epatite*”);
查询q2=queryParser.parse(“epatite”);
System.out.println(“epatite*:”+searcher.search(q1,maxResult).scoreDocs.length);
System.out.println(“epatite:+searcher.search(q2,maxResult).scoreDocs.length”);
这里是结果

epatite*:0
epatite:46
索引是使用以下代码创建的:

final IndexWriterConfig config=new IndexWriterConfig(new StandardAnalyzer());
config.setOpenMode(OpenMode.CREATE);
目录tmpindex=FSDirectory.open(indexFolder);
最终IndexWriter w=新的IndexWriter(tmpindex,配置);
最终列表icd10List=getStringToIndex()
用于(字符串icd10:icd10列表){
最终文件文件=新文件();
添加文档(新文本字段(“全文”,icd10,Field.Store.YES));
w、 添加文档(doc);
}
w、 close();
索引的字符串如下所示:

  • B15.-:Epatite virale acuta A
  • B15.0:Epatite virale A con coma epatico
  • B15.9:Epatite virale A senza coma epatico
  • B16.:Epatite virale acuta B

'car*'
被翻译为
前缀查询
,还应该找到
'car'
。你能添加你的代码吗?正如@YossiVainshtein所说的,我通常认为这是可行的。也许你的分析器中有什么东西影响了“car”,而不是“cars”。你能分享一下代码吗?你是如何索引文档的?