【问题标题】:Solr query based on a string field's subset基于字符串字段子集的 Solr 查询
【发布时间】:2011-11-28 00:55:12
【问题描述】:

我想向 Solr 发送一个字符串,让它回答属于该字符串子集的所有记录。

我要发送的字符串包含用空格分隔的整数。我想让 solr 给我所有记录,其中特定字符串字段是我作为请求字符串提供的数字的子集。

一个例子...

想象一下,我有一个在 Solr 中索引的字符串字段,它实际上是一组由空格分隔的整数。例如,假设我在 Solr 中索引了以下记录的字段:

  • “888110”
  • “888110 888120”
  • “888110 888120 888130”
  • “888110 888120 888130 888140”
  • “888110 888130 888140”
  • “888110 888140”
  • “888140”
  • “888120 888130”

我希望 Solr 接收查询,例如“888110 888140”并回复以下记录:

  • “888110”
  • “888110 888140”
  • “888140”

如果我通过“888110 888120 888130”查询,检索到的记录将是...

  • “888110”
  • “888110 888120”
  • “888110 888120 888130”
  • “888120 888130”

检索到的记录必须恰好是作为字符串提供的数字的子集。

是否可以让 Solr 表现得像这样?

【问题讨论】:

    标签: search solr indexing


    【解决方案1】:

    我有点困惑,为什么在第一个示例中没有返回“888110”,但在第二个示例中却返回了。

    无论如何,如果我大致了解您要做什么,我会创建一个新字段 multi valued 并在查询中使用您的布尔运算符(AND ,OR)。

    例如在模式中

           <field name="code_string" ... />
           <field name="codes" ... multiValued="true"/>
    

    所以你有一个类似的文件

    <doc>
        <arr name="codes">
           <str>811001</str>
           <str>811002</str>
        </arr>
    

    在您的查询中

    ?=codes=811001 OR codes=811002 OR ....
    

    根据我使用 solr 的经验,牺牲一点内存而不是创建极其复杂的过滤器链等通常更清洁/更易于维护

    【讨论】:

    • 没错,“888110”应该在第一个例子的结果中。我的错。您的查询似乎不满足建议的要求。在第一个示例中,您的查询将返回除最后一条之外的所有记录。查询将返回所有记录的第二个示例之一。我希望 solr 返回的是请求中 num 时代的子集的所有记录。如果记录的编号不在请求中,则不应返回该记录。这就是为什么我需要关于子集link 的要求。有什么新想法吗?
    • 两点:1)您想要的输出和指定的行为似乎有些矛盾。您引用If the record has a number that is not in the request this record should not be returned. 这个理由示例1 结果2 与该逻辑相矛盾。 2) 我的查询格式将返回除倒数第二个条目之外的所有条目,例如 2,而不是全部。
    • 明白了。好的,如果不强制使用新的查询格式,我想不出一种合理的方法来使用默认的 Tokenizers/Filters 来做到这一点。我会为这种情况写一个plugin
    猜你喜欢
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    相关资源
    最近更新 更多