lucene.net - 如何在自定义智能搜索 Web 部件中允许前导通配符 (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"
我会收到一个解析错误:'*' or '?' 不允许作为 WildcardQuery 中的第一个字符。
如何在我的自定义 Web 部件中启用通配符查询CMS.Search
?
解决方案
首先,您必须确保您检查的字段在具有正确名称的索引中。documentname 可能不在索引中,它可以称为 _title,这取决于您的索引是如何设置的。获取lukeall并检查您的索引(它应该在 中 \CMS\App_Data\CMSModules\SmartSearch\YourIndexName
)。您也可以使用 luke 来测试您的搜索。
例如,没有标签,但有documenttags字段。
PS通配符正在工作,你是对的,默认情况下你不能将它们用作第一个字符(lucene文档说:你不能使用*或?符号作为搜索的第一个字符),但是有一种方法可以设置它在 lucene.net 中,虽然我不知道在 Kentico 中是否有设置。但我认为您不需要通配符,因此您的查询应该是(假设您在索引中有文档名和文档标签):
+(documentname:"My-Name" AND documenttags:"tag1")
推荐阅读
- android - 使用 JSOUP 从 HTML 解析 JSON 中获取图像 URL
- html - 出现在内容下方的标题元素
- python - Python 3:如何使用 CSFR 从网站上抓取研究结果?
- python - python索引或切片有什么区别?
- javascript - 将 URL 复制到剪贴板并显示和隐藏消息
- python - 使用 google API 在 python 中搜索
- php - 如何在 laravel eloquent 中从三个表中获取记录
- wordpress - 无法在我的 wordpress 网站上安装 jetpack
- javascript - 如何使用 For IN 或 FOR OF 遍历 Array 对象
- opencv - 为什么安装 opencv 并不容易,正如您在教程中看到的那样?