【发布时间】:2018-09-25 14:23:51
【问题描述】:
我有一个 40M 文档的索引,机器配置是 72 核、500GB RAM 和 NVME 驱动器。
我在多值字段上使用 JSON 分面,无论匹配的文档数量如何,它都能正常工作。但是,如果我使用独特的函数应用组分面,它会抛出内存错误并降低我的 solr(当匹配的文档数量> 500k 时)。
我使用以下语法进行组分面。
json.facet={
categories:{
type : terms,
field : cat,
sort : { x : desc},
facet:{
x : "unique(type)"
}
}
}
以下是我正在使用的示例架构
<schema>
<types>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" />
<fieldType name="lower_string" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
</analyzer>
</fieldType>
</types>
<fields>
<field name="cat" type="lower_string" indexed="true" stored="true" multiValued="true" />
<field name="type" type="string" indexed="true" stored="true" required="false" docValues="true" />
</fields>
<uniqueKey>id</uniqueKey>
</schema>
知道如何解决这个问题吗?
【问题讨论】:
-
cat和type的字段类型有哪些?
-
@MatsLindh: cat 是 text 字段,type 是 string 字段
-
请包括字段的完整定义、架构版本和 Solr 版本 - 这与如何完成分面有关。而TextFields不能使用docValues IIRC,而docValues通常是内存占用过多的解决方案。
-
@MatsLindh:我已经用架构更新了我的问题。
-
尝试为类别使用单独的字段,将字段定义为字符串,并在将内容索引到字段中之前进行处理。改为使用它进行分面,并确保为字段类型启用 docValues。对于之前只有一个小写过滤器的 KeywordTokenized 字段,RemoveDuplicatesTokenFilterFactory 也不应该是必需的。