gpt4 book ai didi

c# - 如何使用 Lucene.Net 执行 'contains' 搜索而不是 'starts with'

转载 作者:可可西里 更新时间:2023-11-01 08:19:23 26 4
gpt4 key购买 nike

我们使用 Lucene.NET 在客户网站上实现全文搜索。搜索本身已经可以工作,但我们现在想要进行修改。

目前,所有术语都附加了一个 *,这会导致 Lucene 执行我将其归类为 StartsWith 搜索的操作。

在未来,我们希望有一个搜索执行类似于 Contains 而不是 StartsWith 的搜索。

我们使用

  • Lucene.Net 2.9.2.2
  • 标准分析器
  • 默认查询解析器

示例:

(Title:Orch*) 匹配:Orchestra

但是:

(Title:rch*) 不匹配:Orchestra

我们希望第一个和第二个都匹配 Orchestra

基本上我想要与这个问题中的问题完全相反,我不确定为什么 Lucene 对这个人执行 Contains 而不是 StartsWith默认值:
Why is this Lucene query a "contains" instead of a "startsWith"?

我们怎样才能做到这一点?
我感觉它与分析器有关,但我不确定。

最佳答案

首先,我假设您使用的是 StandardAnalyzer 或类似工具。您的链接问题无法理解您搜索的术语,并且他的案例 a* 将匹配“Fleet Africa”,因为它被标记为“fleet”和“africa”。

您需要调用 QueryParser.SetAllowLeadingWildcard(true) 才能编写类似 field:*value* 的查询。您实际上是在更改传递给 QueryParser 的字符串吗?

您可以像往常一样解析查询,然后实现 QueryVisitor将所有 TermQuery 重写为 WildcardQuery。这样您仍然支持短语搜索。

我认为将查询重写为前缀查询或通配符查询没有任何好处。兽人、箱子和管弦乐队之间几乎没有共同之处,但两个词会匹配。相反,让您的客户使用支持词干提取、同义词并提供拼写更正功能的分析器来修复简单的搜索错误。

关于c# - 如何使用 Lucene.Net 执行 'contains' 搜索而不是 'starts with',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5484965/

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