gpt4 book ai didi

java - Lucene WildcardQuery 无法正常工作

转载 作者:行者123 更新时间:2023-11-30 08:13:49 24 4
gpt4 key购买 nike

我正在尝试使用 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 antonio”等。但我不仅得到这些结果,还得到“sandals”(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

关于java - Lucene WildcardQuery 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29945985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com