![](/img/trans.png)
[英]Does the latest Jackrabbit snapshot work properly with Lucene 3?
[英]WildcardQuery Lucene does not work properly
我正在尝试使用WildCardQuery:
IndexSearcher indexSearcher = new IndexSearcher(ireader);
Term term = new Term("phrase", QueryParser.escape(partOfPhrase) + "*");
WildcardQuery wildcardQuery = new WildcardQuery(term);
LOG.debug(partOfPhrase);
Sort sort = new Sort(new SortField("freq", SortField.Type.LONG,true));
ScoreDoc[] hits = indexSearcher.search(wildcardQuery, null, 10, sort).scoreDocs;
但是,当我插入“ san”(不带引号)时,我想得到的内容是:“ san diego”,“ san anantio”等。但是我不仅得到这些结果,还得到“凉鞋”(必须在空格后san)或juelz santana(我想找到以san开头的句子)。 如何解决此问题?
编辑此外,如果我插入“ san d”,则没有结果。
解决该问题的一种可能方法是使用另一个分析器,该分析器不会按空间拆分文档中的查询和文本。
可能的分析器之一-是KeywordAnalzer ,它将使用整个数据作为单个关键字
测试必不可少的部分:
Directory dir = new RAMDirectory();
Analyzer analyzer = new KeywordAnalyzer();
IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE);
IndexWriter writer = new IndexWriter(dir, iwc);
稍后,我可以添加所需的文档:
Document doc = new Document();
doc.add(new TextField("text", "san diego", Field.Store.YES));
writer.addDocument(doc);
最后,根据需要进行搜索:
IndexReader reader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader);
Term term = new Term("text", QueryParser.escape("san ") + "*");
WildcardQuery wildcardQuery = new WildcardQuery(term);
我的测试工作正常,可以取回圣地亚哥和圣安东尼奥 ,不穿凉鞋 。 在这里查看完整的测试-https: //github.com/MysterionRise/information-retrieval-adventure/blob/master/src/main/java/org/mystic/lucene/WildcardQueryWithSpace.java
有关分析仪本身的更多信息-http://lucene.apache.org/core/4_10_2/analyzers-common/org/apache/lucene/analysis/core/KeywordAnalyzer.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.