【问题标题】:Solr schema for range values范围值的 Solr 模式
【发布时间】:2014-09-25 12:17:34
【问题描述】:

我在 SOLR 中创建了以下类型的架构,用于索引“Age High”和“Age Low”字段

<field name="age"  type="age-levels-facet" multiValued="true" indexed="true"  stored="true" />

<fieldtype name="age-levels-facet" class="solr.TextField">
          <analyzer>
            <tokenizer class="solr.PatternTokenizerFactory" pattern=";"/>
            <filter class="solr.PatternReplaceFilterFactory" pattern="^(([0-2]))?$" replacement="Birth-2" replace="all" />
            <filter class="solr.PatternReplaceFilterFactory" pattern="^(([3-5]))?$" replacement="3-5" replace="all" />
            <filter class="solr.PatternReplaceFilterFactory" pattern="^(([6-8]))?$" replacement="6-8" replace="all" />
            <filter class="solr.PatternReplaceFilterFactory" pattern="^(([9]|1[0-2]))?$" replacement="9-12" replace="all" />
            <filter class="solr.PatternReplaceFilterFactory" pattern="^((1[3-9]|[2-9][0-9]))?$" replacement="13+" replace="all" />
          </analyzer>
        </fieldtype>

因此,如果我通过“age=4-12”,它将返回如下结果。

Birth-2 (0)
3-5 (1)
6-8 (0)
9-12 (1)
13+(0)

根据我创建的架构,这是正确的。但逻辑上不正确。例如对于年龄组为 4-12 的用户,结果将是

Birth-2 (0)
3-5 (1)
6-8 (1)
9-12 (1)
13+(0)

任何人都有任何想法,我如何使用 solr 来实现这一点????

【问题讨论】:

    标签: design-patterns solr filter schema


    【解决方案1】:

    为什么需要烘烤这些?只需使用 Solr Facet by Range 功能或 Facet by Query。然后,您可以将您的年龄存储为一个数字。

    【讨论】:

    • 感谢您的回复,亚历山大。我需要这样做的原因是,我试图用 solr 索引的产品具有“Age High”和“Age Low”等字段。因此具有给定范围的用户可能会搜索这些产品。
    • 抱歉,我不确定我是否理解这些变化。您似乎想要索引数字。您似乎还想搜索数字范围。上面的解决方案做到了。如果您想将特定查询映射到特定用户名(例如 High Age => value > 55),您可以在客户端上执行此操作。我认为混乱可能围绕“我通过年龄= 4-12”。这不是 Solr 语法。也许更清楚地明确索引和搜索值将有助于理解您想要发生的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2011-11-28
    相关资源
    最近更新 更多