我是Apache Solr的新手。即使阅读了文档部分,我仍然很难清楚地了解multiValued
字段类型属性的功能和使用。
Solr在内部做什么/处理/处理标记为multiValued的字段 ?
是什么在索引中的Solr的字段之间的区别是多值和那些没有?
有人可以举例说明吗?
Doc说:
multiValued = true | false
如果此字段可能在每个文档中包含多个值,则为真,即,如果它可以在文档中多次出现
Answers:
当该字段存在多个值时,多值字段很有用。一个简单的例子是标签,可以有多个标签需要索引。因此,如果我们将标签字段设置为多值,那么solr响应将返回列表而不是字符串值。需要注意的一点是,您需要为标记的每个值提交多行,例如:
<field name =“ tags”> tag1 </ tags> <field name =“ tags”> tag2 </ tags> ... <field name =“ tags”>标签</ tags>
获得所有值索引后,您可以按任意值搜索或过滤结果,例如 您可以使用以下查询找到带有tag1的所有文档:
q=tags:tag1
或使用标签过滤出类似
q=query&fq=tags:tag1
fq
而实际搜索查询为q
。
模式中定义的multiValued是否允许该字段具有多个值。
例如:
如果我有一个名为ID的fieldType,则它是multiValued = false的索引文档,例如:
doc {
id : [ 1, 2]
...
}
会导致在索引线程中引发异常,并且不会为文档建立索引(架构验证将失败)。
另一方面,如果我的某个字段确实有多个值,则希望设置multiValued = true,以确保正确完成索引编制,例如:
doc {
id : 1
keywords: [ hello, world ]
...
}
在这种情况下,您可以将“关键字”定义为多值字段。
DataImportHandler
并且我的数据库字段标记类型之一是VARCHAR[]
(varchar数组),则将Solar模式字段中的此标记字段映射为multiValued是有意义的。我的理解正确吗?
我只将多个值字段与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"/>
现在,字段“全部”需要多值。
search or filter results by any value
?在这种情况下,用'q'或中的tag:tag1搜索有什么区别fq
?