【问题标题】:How to allow leading wild cards in custom smart search web part (Kentico 10)如何在自定义智能搜索 Web 部件中允许前导通配符 (Kentico 10)
【发布时间】:2019-01-30 08:35:01
【问题描述】:

我的产品有一个自定义索引,并且我正在使用子集分析器。这个分析器很好用,但是如果你进行字段搜索,它就不起作用了。

例如,我有一个包含以下字段的文档:

  • "documentname", "My-Document-Name"
  • "tags", "1234,5678,9101"
  • "documentdescription", "This is a great Document, My-Document-Name."

当我只搜索 "name AND tags:(1234)" 时,我会在结果中看到此文档,因为它搜索的是 +_content:name

-- 然而

当我搜索 "documentname:(name)^3.0 AND tags:(1234)" 时,我的结果中没有此文档。

当然,当我执行"documentname:(*name*)^3.0" 时,我得到一个解析错误:'*' or '?'不允许作为 WildcardQuery 中的第一个字符

如何在我的自定义 CMS.Search webpart 中启用通配符查询?

【问题讨论】:

    标签: lucene.net kentico query-parser


    【解决方案1】:

    首先,您必须确保 您检查的字段在索引中 中具有正确的名称。 documentname 可能不在索引中,它可以称为 _title,这取决于您的索引是如何设置的。获取lukeall 并检查您的索引(它应该在\CMS\App_Data\CMSModules\SmartSearch\YourIndexName 中)。您也可以使用 luke 来测试您的搜索。

    例如,没有标签,但有documenttags 字段。

    附: Wildcards 正在工作,你是对的,默认情况下你不能将它们用作第一个字符(lucene 文档说:你不能使用 * 或 ? 符号作为搜索的第一个字符),但是有 a way to set it up in lucene.net,虽然我不知道 Kentico 是否有这样的设置。但我认为您不需要通配符,因此您的查询应该是(假设您在索引中有文档名和文档标签):

    +(documentname:"My-Name" AND documenttags:"tag1")
    

    【讨论】:

    • 谢谢彼得,我一直在使用 Luke All 来测试搜索。所有这些字段都被正确索引,“标签”是一个自定义字段。一个问题是“文档名”没有被标记化。我解决了这个问题,现在如果我搜索“名称”,就会显示文档,但是如果我搜索“文档?名称”,我没有得到任何结果?
    • ?搜索查找与替换的单个字符匹配的术语。所以 document*name 应该可以工作,因为它会搜索 0 个或更多字符。
    猜你喜欢
    • 2020-03-08
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多