Postgresql 如何在SOLR中高效地索引和查询JSON字段数据?
从包含长嵌套JSONB数据的字段的Postgres索引数据的最佳方法是什么 POSTGRES字段(json\u db\u字段):Postgresql 如何在SOLR中高效地索引和查询JSON字段数据?,postgresql,search,indexing,solr,Postgresql,Search,Indexing,Solr,从包含长嵌套JSONB数据的字段的Postgres索引数据的最佳方法是什么 POSTGRES字段(json\u db\u字段): { ... "field_name": "field_value", "columns": [ { "nested_key": "nested_value_1", ... }, { "nested_key": "nested_value_1",
{
...
"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>
这是相当缓慢的查询,因此我认为最好改变这个设置,因为在未来这可能会导致问题
有不同的方法将JSON数据引入Solr,尽管在我看来,Solr可以更理想地用XML(使用DIH)填充,而不是JSON内容 但是如果存储JSON,就不应该将其存储为简单的文本字段。 顺便说一句:发布你的
my_text\u general
字段定义会很有帮助
我是否应该首先在Postgres中将JSON字段展平到一个新表中,每个对象项都有列
我不会那么做的。在平面结构中迁移面向对象的结构是可行的,但在这种情况下,您会发现不同的问题
有没有一种方法可以在SOLR中索引这个字段,以便我高效地查询
如何通过使用类似于“嵌套文档”的东西将JSON indiex作为Solr,包括JSON结构的一部分,有不同的方法,也有不同的问题
看看这个:
//更新
看看你的字段定义,我不会使用那么多过滤器。但这取决于你的需要。大多数情况下,您喜欢精确地搜索一个术语,如列
。可能您不喜欢同时查找列
。为此,您应该只使用最小的过滤器,如lowerCase
和solr.StandardTokenizerFactory
点击此处查看可能的情况:我已经更新了帖子以包含字段定义。
qf=json_db_field