我有一个SOLR DB与ca. 70M文件.某些查询返回大约300个文档.同
facet.field = A只用了4毫秒,
facet.field = B需要800毫秒才能返回!
我的架构中有错误吗?可以更快地完成吗?
cheffe.. 6
场A
是类型的string
,适合用作刻面.你的领域B
被分析,你剥离了特殊的字符,你小写它,这不是很好用作一个方面.后来的事情是在应用时完成的StandardFilterFactory
.
在Solr的Wiki中,有一个关于方面的有趣部分
由于分面字段通常被指定用于两个目的,即人类可读文本和向下钻取查询值,因此它们通常与用于搜索和排序的字段的索引不同:
它们通常不会被标记为单独的词
它们通常不会映射到小写字母
通常不会删除人类可读的标点符号(双引号除外)
通常不需要存储它们,因为存储的值看起来很像索引值,并且分面机制用于值检索.
你可以看到你错过了中间的两个点,你小写并删除了特殊的字符.
正如在索引字段中使用SOLR和LowerCaseFilterFactory所建议的那样,您应该在模式中引入一个新字段,该字段应该是类型,string
并B
通过copyField 与您的字段保持同步.这个新领域应该用于分面,它应该更快.我们通常用后缀命名这些字段,比如B_raw
.
由于您拥有70米的文档,因此最好先使用子集进行测试以节省您的时间.
场A
是类型的string
,适合用作刻面.你的领域B
被分析,你剥离了特殊的字符,你小写它,这不是很好用作一个方面.后来的事情是在应用时完成的StandardFilterFactory
.
在Solr的Wiki中,有一个关于方面的有趣部分
由于分面字段通常被指定用于两个目的,即人类可读文本和向下钻取查询值,因此它们通常与用于搜索和排序的字段的索引不同:
它们通常不会被标记为单独的词
它们通常不会映射到小写字母
通常不会删除人类可读的标点符号(双引号除外)
通常不需要存储它们,因为存储的值看起来很像索引值,并且分面机制用于值检索.
你可以看到你错过了中间的两个点,你小写并删除了特殊的字符.
正如在索引字段中使用SOLR和LowerCaseFilterFactory所建议的那样,您应该在模式中引入一个新字段,该字段应该是类型,string
并B
通过copyField 与您的字段保持同步.这个新领域应该用于分面,它应该更快.我们通常用后缀命名这些字段,比如B_raw
.
由于您拥有70米的文档,因此最好先使用子集进行测试以节省您的时间.