我是 Apache Solr 的新手。即使在阅读了文档部分之后,我也很难清楚地理解multiValued
字段类型属性的功能和使用。
Solr 在内部做什么/处理/处理标记为 multiValued的字段?
在 Solr 中,多值字段和非多值字段之间的索引有什么区别?
有人可以用一些很好的例子来解释吗?
医生说:
多值=真|假
如果此字段在每个文档中可能包含多个值,即如果它可以在文档中出现多次,则为真
我是 Apache Solr 的新手。即使在阅读了文档部分之后,我也很难清楚地理解multiValued
字段类型属性的功能和使用。
Solr 在内部做什么/处理/处理标记为 multiValued的字段?
在 Solr 中,多值字段和非多值字段之间的索引有什么区别?
有人可以用一些很好的例子来解释吗?
医生说:
多值=真|假
如果此字段在每个文档中可能包含多个值,即如果它可以在文档中出现多次,则为真
当字段存在多个值时,多值字段很有用。一个简单的例子是标签,可能有多个标签需要被索引。因此,如果我们将标签字段设置为多值,那么 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
multiValued 在模式中定义是否允许字段具有多个值。
例如:
如果我有一个名为 ID 的 fieldType,它是 multiValued=false 索引这样的文档:
doc {
id : [ 1, 2]
...
}
会导致在索引线程中抛出异常并且文档不会被索引(模式验证将失败)。
另一方面,如果我确实有一个字段的多个值,我想设置 multiValued=true 以保证索引正确完成,例如:
doc {
id : 1
keywords: [ hello, world ]
...
}
在这种情况下,您可以将“关键字”定义为多值字段。
我只对复制字段使用多个值字段,所以这样想,说所有字段都是单值的,除非它是一个复制字段,例如我有以下字段:
<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'需要是多值的。