Indexing “有什么用?”;多值;Solr中的字段类型?

Indexing “有什么用?”;多值;Solr中的字段类型?,indexing,full-text-search,solr,multivalue,Indexing,Full Text Search,Solr,Multivalue,我是Apache Solr的新手。即使在阅读了该部分之后,我发现很难清楚地理解多值字段类型属性的功能和用法 Solr内部如何处理标记为多值的字段 多值字段和非多值字段在Solr中的索引有什么区别 有人能举例说明吗 医生说: 多值=真|假 如果这是真的 每个字段可能包含多个值 文档,即它是否可以出现 在一个文档中多次 架构中定义的多值字段是否允许具有多个值 例如: 如果我有一个名为ID的字段类型,该字段类型为多值=false,为文档编制索引,例如: doc { id : [ 1, 2] .

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

Solr内部如何处理标记为多值的字段

多值字段和非多值字段在Solr中的索引有什么区别

有人能举例说明吗

医生说:

多值=真|假

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


架构中定义的多值字段是否允许具有多个值

例如:
如果我有一个名为ID的字段类型,该字段类型为多值=false,为文档编制索引,例如:

doc {
  id : [ 1, 2]
  ...
}
将导致在索引线程中引发异常,并且文档将不会被索引(架构验证将失败)

另一方面,如果一个字段有多个值,我希望将multiValued设置为true,以确保正确执行索引,例如:

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

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

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

<field name="tags">tag1</tags> <field name="tags">tag2</tags> ... <field name="tags">tagn</tags> 或者使用标记筛选出结果,如

q=query&fq=tags:tag1

我只在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"/>


现在,字段“all”必须是多值的。

请告诉我是否正确理解了这一点。例如,如果我尝试使用
DataImportHandler
直接从数据库索引数据,并且如果我的数据库字段标记类型之一是
VARCHAR[]
(VARCHAR数组),那么将Solar schema字段中的该标记字段映射为多值是有意义的。我的理解正确吗?比赛很晚了,但我通常会说是的。。。但是永远不要说永远也永远不要说永远做
搜索或按任何值过滤结果之间的区别/优势是什么?在这种情况下,使用标记进行搜索有什么区别:“q”或
fq
中的tag1?每个值都可以是一个字符串,并且可以与一组字符串精确匹配。在单值字段的情况下,您可以有标记化的单词或整个字符串。另一个用途是存储我在标记中提到的列表中的值,这些值可以是数字,就像一个数值列表一样。@Gnanam:过滤的查询被缓存,不会影响分数。它们的主要目的是创建一个固定的文档“超集”,然后可以对其进行搜索。示例:用户输入查询,应用程序应用其他约束,例如仅搜索用户拥有的文档。在这种情况下,应用程序将以
fq
的形式发送约束“仅给定用户”,并以
q
的形式发送实际搜索查询。如果您不知道标记的值,该怎么办。例如,在为一组论文编制索引时,您希望将“关键字”设置为多值字段,但您不知道所有值!
<field name="all" type="text" indexed="true" stored="true" multiValued="true"/>
<copyField source="*" dest="all"/>