繁体   English   中英

WildcardQuery Lucene无法正常工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM