如何在自定义智能搜索 Web 部件 (Kentico 10) 中允许前导通配符
How to allow leading wild cards in custom smart search web part (Kentico 10)
我的产品有一个自定义索引,我正在使用子集分析器。这个分析器很好用,但是如果你做字段搜索,它就不起作用了。
例如,我有一个包含以下字段的文档:
"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"
时,我收到一个解析错误:'*' 或 '?'不允许作为 WildcardQuery.
中的第一个字符
如何在我的自定义 CMS.Search
Web 部件中启用通配符查询?
首先,您必须确保您检查的 字段在索引 中并具有正确的名称。 documentname 可能不在索引中,它可以称为 _title,取决于您如何设置索引。获取 lukeall 并检查您的索引(它应该在 \CMS\App_Data\CMSModules\SmartSearch\YourIndexName
中)。您也可以使用 luke 来测试您的搜索。
例如,没有 标签 但有 documenttags 字段。
P.S。 Wildcards are working and you are right you can't use them as a first character by default (lucene documentation says: You cannot use a * or ? symbol as the first character of a search), but there is a way to set it up in lucene.net,虽然我不知道Kentico有没有设置。但我认为您不需要通配符,所以您的查询应该是(假设索引中有文档名和文档标签):
+(documentname:"My-Name" AND documenttags:"tag1")
我的产品有一个自定义索引,我正在使用子集分析器。这个分析器很好用,但是如果你做字段搜索,它就不起作用了。
例如,我有一个包含以下字段的文档:
"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"
时,我收到一个解析错误:'*' 或 '?'不允许作为 WildcardQuery.
如何在我的自定义 CMS.Search
Web 部件中启用通配符查询?
首先,您必须确保您检查的 字段在索引 中并具有正确的名称。 documentname 可能不在索引中,它可以称为 _title,取决于您如何设置索引。获取 lukeall 并检查您的索引(它应该在 \CMS\App_Data\CMSModules\SmartSearch\YourIndexName
中)。您也可以使用 luke 来测试您的搜索。
例如,没有 标签 但有 documenttags 字段。
P.S。 Wildcards are working and you are right you can't use them as a first character by default (lucene documentation says: You cannot use a * or ? symbol as the first character of a search), but there is a way to set it up in lucene.net,虽然我不知道Kentico有没有设置。但我认为您不需要通配符,所以您的查询应该是(假设索引中有文档名和文档标签):
+(documentname:"My-Name" AND documenttags:"tag1")