【问题标题】:Kentico Custom Lucene Index with multiple facets that are similar - how to query?具有多个相似方面的 Kentico 自定义 Lucene 索引 - 如何查询?
【发布时间】:2018-04-08 14:17:42
【问题描述】:

我创建了一个自定义索引,其中存储了多个用于过滤的额外字段。例如,我正在存储一些方面来选择风筝颜色。有些风筝只有一种颜色,有些风筝有多种颜色。

风筝A颜色:深蓝红橙深红

风筝B颜色:蓝色

其中风筝 A 的颜色是深蓝色、红色、橙色和深红色。

这样的查询 +颜色:蓝色 将返回风筝 a 和风筝 b,即使风筝 A 颜色是深蓝色但不是蓝色。只应归还风筝 B。

我的问题是这个 - 我可能很难找到和回答,因为我不知道正确的术语,但是我应该如何将值存储在 lucene 中以便我可以分隔值(分隔符?)。另外,我如何对查询进行短语化,以便如果我搜索 color:red 它不返回值为 color:"deep red" 的行?如果我要搜索颜色:(深红色),它不会返回具有“红色”但不是“深红色”的行

【问题讨论】:

    标签: search indexing lucene kentico


    【解决方案1】:

    看看搜索索引analyzer types:搜索结果取决于分析器类型+search settings of the object(页面类型、自定义表格等)。

    我认为颜色字段在搜索设置中被标记为标记化,这就是它返回与字段值的单个标记(子集)匹配的结果的原因。如果禁用标记化,则仅当字段的完整值与搜索表达式完全匹配时,搜索才会返回项目。

    【讨论】:

    • 如果我在字段上禁用标记化,那么当我传入查询颜色:红色时,不会返回任何内容
    • 我查看了文档并尝试了不同的索引,但我喜欢一些关于如何存储数据以及如何在 Lucene 中查询数据的建议,这更像是一个 Lucene 问题而不是 Kentico 问题跨度>
    【解决方案2】:

    这里有一个建议。您是否要求访问者输入颜色(我假设不是),或者您有一个过滤器列表,他们可以检查以进行过滤?

    如果它是一个过滤器列表,那么您可能需要考虑使用“dark_blue”作为值,使用“dark blue”作为显示。用于内容输入和过滤器。这样,过滤器将是 color:dark_blue。

    然后您的索引可以使用“开始宽度”作为分析器类型,因此当搜索“深蓝色”时,它会将“dark_blue”作为值,“蓝色”不会返回。然后,当搜索“blue”时,“dark_blue”将不会显示,因为它不是以“blue...”开头的

    【讨论】:

    • 谢谢 Rui,我可以试试。如果索引中的值是 dark_blue red ,如果过滤器用于 color:red ,它还会被拾取吗?此外,lucene 不会忽略 _?
    • 如果color字段被token化,那么dark_blue和red会被索引为两个token,dark_blue应该被视为一个词。
    猜你喜欢
    • 2017-03-11
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2016-02-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多