Solr查询基于字符串字段的子集

时间:2011-09-29 21:05:51

标签: search solr indexing

我想向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表现得像这样?

1 个答案:

答案 0 :(得分:0)

我有点困惑为什么在第一个例子中没有返回“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的经验,它通常更清洁/更易于维护而牺牲一点记忆而不是创建虚弱复杂的过滤器链等