[英]How to efficiently index and query JSON field data in SOLR?
从Postgres索引数据的最佳方法是什么,该数据包含一个带有长时间嵌套的JSONB数据的字段。
POSTGRES FIELD(json_db_field):
{
...
"field_name": "field_value",
"columns": [
{
"nested_key": "nested_value_1",
...
},
{
"nested_key": "nested_value_1",
...
},
],
...
}
截至目前,我正在像这样对字段进行索引:
<field name="json_db_field" type="my_text_general" indexed="true" stored="true" required="false" multiValued="false" default="{}"/>
<fieldType name="my_text_general" class="solr.TextField" positionIncrementGap="100" multiValued="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
<filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone"/>
</analyzer>
</fieldType>
我可以通过将其包含在查询字段中来查询该字段:
qf=json_db_field
查询的速度相当慢,因此我认为最好更改此设置,因为将来可能会引起问题。
将JSON数据引入Solr的方法有很多,尽管-在我看来-Solr可以比JSON内容更理想地用XML(使用DIH)填充。
但是,如果存储JSON,则不应将其存储为简单的文本字段。 顺便说一句:发布您的my_text_general
字段定义会有所帮助。
我是否应该先将Postgres中的JSON字段展平到一个新表,其中每个对象项都有列?
我不会那样做。 将面向对象的结构迁移到平面结构中是可以的,但是大多数情况下,您会发现这样的问题。
有没有一种方法可以索引我可以有效查询的SOLR?
存在不同的方式,也存在不同的问题。如何通过使用靠近“嵌套文档”的内容来将Solr JSON索引,包括JSON结构的一部分。
看看这个:
//更新查看您的字段定义,我不会使用那么多的过滤器。 但这取决于您的需求。 通常,您喜欢搜索一个准确的术语,例如columns
。 可能您不喜欢也找到column
。 为此,您应该只使用最少的过滤器,例如lowerCase
和类似solr.StandardTokenizerFactory
过滤器
看看这有什么可能: Solr分析器,令牌生成器和令牌过滤器
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.