首页 > 解决方案 > 如何在自定义智能搜索 Web 部件中允许前导通配符 (Kentico 10)

问题描述

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

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

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

--但是

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

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

如何在我的自定义 Web 部件中启用通配符查询CMS.Search

标签: lucene.netkenticoquery-parser

解决方案


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

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

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

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

推荐阅读