Indexing solr镶嵌面是否使用额外的空间?如果是这样的话,如何避免solr中某些字段的刻面?

Indexing solr镶嵌面是否使用额外的空间?如果是这样的话,如何避免solr中某些字段的刻面?,indexing,solr,lucene,Indexing,Solr,Lucene,我最近开始与solr合作,目前正在探索solr方面的支持。对于文本相关字段,我可以假设solr不会创建任何额外的数据结构来存储方面信息 如果我有以下json文档: { ... "name":"john" "department":"IT" "salary":10000 ... } 我想做两个领域的部门和工资方面的搜索 因此,对于department,我假设创建的反向索引/映射可以返回给定facet单词的文档列表,并且没有额外的空间用于显示facet信息。这个假设正确吗?或者solr使用额

我最近开始与solr合作,目前正在探索solr方面的支持。对于文本相关字段,我可以假设solr不会创建任何额外的数据结构来存储方面信息

如果我有以下json文档:

{
...

"name":"john"
"department":"IT"
"salary":10000 
...

}
我想做两个领域的部门和工资方面的搜索

因此,对于department,我假设创建的反向索引/映射可以返回给定facet单词的文档列表,并且没有额外的空间用于显示facet信息。这个假设正确吗?或者solr使用额外的空间来支持方面

对于salary字段中基于范围的方面,solr为文档编制索引以支持基于范围的查询时,会创建额外的数据结构,这是否正确


如果Solr使用额外的空间来支持facet,我是否可以对某些我想索引但不想对其进行facet搜索的字段禁用它,比如我们如何给出
“index=true”
?我的一位朋友说,Oracle endeca有这个功能,我们可以配置为禁用/启用字段的facet支持,因此,如果存在的话,我需要在solr中使用类似的功能。

一般来说,solr通常将facet放在索引字段上,而不是存储字段上

Solr通常可以使用3种算法:

  • enum
    枚举字段中的所有术语,计算与该术语匹配的文档与与与查询匹配的文档的交集

  • fc
    通过迭代与查询匹配的文档并对每个文档中出现的术语求和来计算方面计数

  • fcs
    单值字符串字段的每段字段镶嵌面
它们有不同的缺点和优点。但一般来说,您可以看到,这里不需要特殊的数据结构,所有这些都可以通过过滤查询或通过迭代索引中的文档来完成。对于范围镶嵌,还有两种其他镶嵌方法:

  • filter
    此方法基于其他facet.range参数生成范围,并为每个参数执行一个过滤器,该过滤器稍后与主查询结果集相交以获取计数
  • dv
    此方法迭代与主查询匹配的文档,并为每个文档找到正确的值范围。此方法将使用docValues(如果为字段启用)或fieldCache
这导致了下面的总结,对于刻面,Solr可以使用-这是一种在内部记录字段值的特殊方式,对于某些目的,例如排序和刻面,比传统索引更有效

此外,这意味着如果某个字段的值为
docValues=“true”
,则该字段用于排序、刻面或函数查询时,将自动使用docValues


转到最后一个问题-如果您不需要在此字段上进行镶嵌面处理或排序,您可以禁用此字段的docValues(或者不要触摸它,因为默认情况下它是false),这通常会为您节省一些空间。

通常-Solr通常将镶嵌面放在索引字段上,而不是存储字段上

Solr通常可以使用3种算法:

  • enum
    枚举字段中的所有术语,计算与该术语匹配的文档与与与查询匹配的文档的交集

  • fc
    通过迭代与查询匹配的文档并对每个文档中出现的术语求和来计算方面计数

  • fcs
    单值字符串字段的每段字段镶嵌面
它们有不同的缺点和优点。但一般来说,您可以看到,这里不需要特殊的数据结构,所有这些都可以通过过滤查询或通过迭代索引中的文档来完成。对于范围镶嵌,还有两种其他镶嵌方法:

  • filter
    此方法基于其他facet.range参数生成范围,并为每个参数执行一个过滤器,该过滤器稍后与主查询结果集相交以获取计数
  • dv
    此方法迭代与主查询匹配的文档,并为每个文档找到正确的值范围。此方法将使用docValues(如果为字段启用)或fieldCache
这导致了下面的总结,对于刻面,Solr可以使用-这是一种在内部记录字段值的特殊方式,对于某些目的,例如排序和刻面,比传统索引更有效

此外,这意味着如果某个字段的值为
docValues=“true”
,则该字段用于排序、刻面或函数查询时,将自动使用docValues


转到最后一个问题-如果您不需要在此字段上进行镶嵌或排序,您可以禁用此字段的docValues(或者不要触摸它,因为默认情况下它是假的),这通常会为您节省一些空间。

简短版本:镶嵌默认情况下不使用任何额外空间,但是使用docValues可以以额外的磁盘空间为代价实现更高效的刻面。自6.0以来,对于非文本类型,默认情况下DocValues也为true,但这些字段类型通常不用于刻面。:-)感谢您详细的回答:)简短版本:faceting默认情况下不使用任何额外的空间,但使用docValues可以更高效地进行faceting,同时还需要额外的磁盘空间。自6.0以来,对于非文本类型,默认情况下DocValues也为true,但这些字段类型通常不用于刻面。:-)谢谢你详尽的回答:)