gpt4 book ai didi

java - Lucene 3.5.0 QueryParser 在以编程方式生成的查询中找不到任何结果

转载 作者:行者123 更新时间:2023-11-29 08:07:40 25 4
gpt4 key购买 nike

这最近一直困扰着我,我似乎无法在任何地方找到合适的解释。

如果我运行一个使用 Query API 构建的查询,它运行得非常好。

TermQuery sourceQuery = new TermQuery(new Term("source", "CNN"));

运行 results = searcher.search(sourceQuery, 30) 并检查 results.totalHits 显示值为 159。

但是,在同一个程序中,我设置了一个QueryParser(我的默认字段称为text):

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);
QueryParser parser = new QueryParser(Version.LUCENE_35,
"text", analyzer);

并输入命令行查询

source:CNN

没有结果。在 Luke 上运行此命令确实给我一个结果。有谁知道发生了什么事吗?

最佳答案

您可能为 QueryParser 对象使用了错误的分析器。请注意:

  1. 当您构建自己的 Term 对象时,术语的文本为大写。
  2. 您将 StandardAnalyzer 提供给 QueryParser,因此术语的文本被转换为小写(由 StandardAnalyzer)。
  3. Luke 的默认分析器是 KeywordAnalyzer,它会保留您指定术语的大小写(即大写)。

我猜你的术语在索引文本时是大写的(或变成大写的)。这解释了为什么方法 1 和 3 有效,但方法 2 无效,因为案例不匹配。一般来说,use the same Analyzer when indexing and when searching 是个好主意,或者至少要注意大小写。

关于java - Lucene 3.5.0 QueryParser 在以编程方式生成的查询中找不到任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10032824/

25 4 0
文章推荐: java - 动画/滚动文本
文章推荐: php - 我认为这段代码很容易受到攻击。可能是什么原因?
文章推荐: Java vector 类方法访问