Solr中“multiValued”字段类型的用途是什么?

时间:2011-04-27 07:24:56

标签: indexing full-text-search solr multivalue

我是Apache Solr的新手。即使在阅读documentation部分之后,我发现很难清楚地理解multiValued字段类型属性的功能和用法。

Solr做什么/处理/处理标记为 multiValued 的字段?

multiValued 的字段与不是的字段在Solr中的索引有什么区别?

有人可以用一些好的例子来解释吗?

Doc说:

  

多值=真|假

     

如果这是真的   字段可能包含多个值   文件,即它是否可以出现   多次在文档中

3 个答案:

答案 0 :(得分:72)

当字段存在多个值时,多值字段很有用。一个简单的例子是标签,可以有多个需要索引的标签。因此,如果我们将标记字段设置为多值,则solr响应将返回列表而不是字符串值。需要注意的一点是,您需要为标记的每个值提交多行,如:

<field name="tags">tag1</tags>
<field name="tags">tag2</tags>
...
<field name="tags">tagn</tags>

一旦拥有了所有值索引,您就可以按任意值搜索或过滤结果,例如:你可以使用像

这样的查询找到tag1的所有文档
q=tags:tag1

或使用标签过滤掉

等结果
q=query&fq=tags:tag1

答案 1 :(得分:14)

在模式中定义的multiValued是否允许该字段具有多个值。

例如:
如果我有一个名为ID的字段类型,它是multiValued = false索引文档,例如:

doc {
  id : [ 1, 2]
  ...
}

会导致在索引线程中抛出异常,并且文档将不会被编入索引(架构验证将失败)。

另一方面,如果我有一个字段的多个值,我想设置multiValued = true以保证索引正确完成,例如:

doc {
  id : 1
  keywords: [ hello, world ]
  ...
}

在这种情况下,您可以将“keywords”定义为multiValued字段。

答案 2 :(得分:12)

我只使用复制字段的多个值字段,所以想一想,除非它是一个复制字段,否则所有字段都是单值的,例如我有以下字段:

<field name="id" type="string" indexed="true" stored="true"/>
<field name="name" type="string" indexed="true" stored="true"/>
<field name="subject" type="string" indexed="true" stored="true"/>
<field name="location" type="string" indexed="true" stored="true"/>

我想只查询一个字段,可能搜索上面的所有4个字段,然后我们需要使用copyfield。首先创建一个新的字段调用'all',然后将所有内容复制到'all'

<field name="all" type="text" indexed="true" stored="true" multiValued="true"/>
<copyField source="*" dest="all"/>

现在字段'all'需要多值。