gpt4 book ai didi

java - Lucene查询对象和搜索

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:39 24 4
gpt4 key购买 nike

我正在从 Lucene 3.6 升级到 5.3.0,但使用 5.3.0 时搜索不想获取我的参数。

这适用于 3.6:

IndexSearcher searcher = new IndexSearcher(IndexReader.open(directory));
SimpleAnalyzer analyzer = new SimpleAnalyzer(Version.LUCENE_36);
QueryParser parser = new QueryParser(Version.LUCENE_36, "contents",
analyzer);
TopDocs topDocs = null;
Query query = parser.parse(queryString);
topDocs = searcher.search(query, 1000);

但是在 5.3 中,编译器要求我使用 SrndQuery,但我在 searcher.search 方法上仍然遇到错误:

IndexSearcher searcher = new IndexSearcher(DirectoryReader.open(directory));
Analyzer analyzer = new SimpleAnalyzer();
QueryParser parser = new QueryParser();
TopDocs topDocs = null;

SrndQuery query = QueryParser.parse(queryString);
topDocs = searcher.search(query, 1000);//**The method search(Query, int) in the type IndexSearcher is not applicable for the arguments (SrndQuery, int)**

不确定我在这里做错了什么。有什么想法吗?

附注我正在升级,因为我无法从我最近索引的一些 PDF 中获取突出显示的文本。

最佳答案

需要说明的是,您正在使用 Surround 查询解析器,而不是标准查询解析器(如果您打算使用标准解析器,那么您将导入错误的解析器)。

您遇到的问题是 SrndQuery 并不是真正的 lucene 查询,因此您不能将其运行到搜索器中并获取结果。您需要将其转换为 lucene 查询才能使用它进行搜索。这是通过 SrndQuery.makeLuceneQueryField 完成的方法。您需要创建一个 BasicQueryFactory传递给它,但它们很容易构造:

SrndQuery query = QueryParser.parse(queryString);
BasicQueryFactory factory = new BasicQueryFactory(1000 /*maxBasicQueries*/);
Query luceneQuery = query.makeLuceneQueryField("myDefaultField", factory);
topDocs = searcher.search(luceneQuery, 1000);
<小时/>

有点切题的说明:我有点想知道您是否应该保留BasicQueryFactory,而不是为每次搜索创建一个新的,但似乎没有必要。构造函数中绝对没有发生任何昂贵的事情,而且看起来 solr 的 SurroundQParserPlugin 为它解析的每个查询构造了一个新的构造函数,因此这样做应该没问题。

关于java - Lucene查询对象和搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32700560/

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