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


75

我是Apache Solr的新手。即使阅读了文档部分,我仍然很难清楚地了解multiValued字段类型属性的功能和使用。

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

是什么在索引中的Solr的字段之间的区别是多值和那些没有?

有人可以举例说明吗?

Doc说:

multiValued = true | false

如果此字段可能在每个文档中包含多个值,则为真,即,如果它可以在文档中多次出现

Answers:


74

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

<field name =“ tags”> tag1 </ tags>
<field name =“ tags”> tag2 </ tags>
...
<field name =“ tags”>标签</ tags>

获得所有值索引后,您可以按任意值搜索或过滤结果,例如 您可以使用以下查询找到带有tag1的所有文档:

q=tags:tag1

或使用标签过滤出类似

q=query&fq=tags:tag1

5
两者之间有什么区别/优点search or filter results by any value?在这种情况下,用'q'或中的tag:tag1搜索有什么区别fq
加纳南姆

1
每个值可以是一个字符串,并且您可以与一组字符串完全匹配。如果是单值字段,则可以有标记词或整个字符串。另一个用途是存储值,就像我在标签中提到的那样,它可以是列表,可以是数字,如数字值列表。
Umar

6
@Gnanam:筛选的查询被缓存,不会影响得分。它们的主要目的是创建文档的固定“超集”,然后可以对其进行搜索。示例:用户输入查询,应用程序将应用其他约束,例如仅搜索用户拥有的文档。在这种情况下,应用程序将发送约束“仅给定用户”为,fq而实际搜索查询为q
Daniel Rikowski 2011年

如果您不知道标签的值怎么办。例如,在为论文集建立索引时,您希望将“关键字”设置为multiValue字段,但您不知道所有值!
fanchyna 2014年

15

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

例如:
如果我有一个名为ID的fieldType,则它是multiValued = false的索引文档,例如:

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

会导致在索引线程中引发异常,并且不会为文档建立索引(架构验证将失败)。

另一方面,如果我的某个字段确实有多个值,则希望设置multiValued = true,以确保正确完成索引编制,例如:

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

在这种情况下,您可以将“关键字”定义为多值字段。


1
让我知道我是否正确理解了这一点。例如,如果我尝试使用来直接从数据库中索引数据,DataImportHandler并且我的数据库字段标记类型之一是VARCHAR[](varchar数组),则将Solar模式字段中的此标记字段映射为multiValued是有意义的。我的理解正确吗?
加纳南姆

1
在这里比赛晚了,但我通常会说是...但是永远不要说永远也永远不要说永远
markgiaconia 2014年

12

我只将多个值字段与copyfields一起使用,所以以这种方式思考,说所有字段都是单值的,除非它是一个copyfield,例如,我有以下字段:

<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"/>

现在,字段“全部”需要多值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.