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

Gna*_*nam 72 indexing solr full-text-search multivalue

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

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

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

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

Doc说:

多值= TRUE | FALSE

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

Uma*_*mar 74

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

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

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

q=tags:tag1
Run Code Online (Sandbox Code Playgroud)

或使用标签过滤掉结果

q=query&fq=tags:tag1
Run Code Online (Sandbox Code Playgroud)

  • @Gnanam:过滤的查询被缓存,不会影响分数.它们的主要目的是创建一个固定的"超集"文档,然后可以搜索它们.示例:用户输入查询,应用程序应用其他约束,例如仅搜索用户拥有的文档.在这种情况下,应用程序将约束"仅给定用户"发送为"fq",将实际搜索查询发送为"q". (6认同)
  • 用任何值"搜索或过滤结果"之间有什么区别/优势?在这种情况下,它与*标签搜索有什么区别:'q'或`fq`中的tag1*? (5认同)

Asa*_*saf 15

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

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

doc {
  id : [ 1, 2]
  ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

doc {
  id : 1
  keywords: [ hello, world ]
  ...
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以将"keywords"定义为multiValued字段.


小智 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"/>
Run Code Online (Sandbox Code Playgroud)

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

<field name="all" type="text" indexed="true" stored="true" multiValued="true"/>
<copyField source="*" dest="all"/>
Run Code Online (Sandbox Code Playgroud)

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