如何在自定义智能搜索Web部件(Kentico 10)中允许使用前导通配符

时间:2018-08-23 21:42:56

标签: lucene.net kentico query-parser

我有我的产品的自定义索引,并且我正在使用子集分析器。该分析器可以很好地工作,但是如果您进行字段搜索,则无法使用。

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

  • "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 Webpart中启用通配符查询?

1 个答案:

答案 0 :(得分:1)

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

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

P.S。 Wildcards正常工作,很正确,默认情况下您不能将它们用作第一个字符(lucene文档说:您不能使用*或?符号作为搜索的第一个字符),但是有{{ 3}},尽管我不知道Kentico是否有设置。但我认为您不需要通配符,因此您的查询应该是(假设索引中有文档名和文档标签):

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