从Postgres索引数据的最佳方法是什么,该数据包含一个带有长时间嵌套的JSONB数据的字段。
POSTGRES字段(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
这是很慢的查询,因此我认为最好更改此设置,因为将来可能会引起问题。
答案 0 :(得分:0)
将JSON数据引入Solr的方法有很多,尽管-我认为-Solr可以用XML(使用DIH)填充而不是JSON内容。
但是,如果您存储JSON,则不应将其存储为简单的文本字段。
顺便说一句:发布您的my_text_general
字段定义会有所帮助。
我应该先在Postgres中将JSON字段展平到一个新表,其中包含每个对象项的列吗?
我不会那样做。将面向对象的结构迁移到平面结构中是可以的,但是大多数情况下您会发现这种方式的不同问题。
是否有一种方法可以在SOLR中为我可以有效查询的该字段建立索引?
有不同的方式,也有不同的问题。如何通过使用靠近“嵌套文档”的内容来将Solr JSON索引,包括JSON结构的一部分。
看看这个:
indexing-nested-documents-in-solr
//更新
查看您的字段定义,我不会使用太多的过滤器。但这取决于您的需求。通常,您喜欢搜索一个准确的术语,例如columns
。可能您也不想找到column
。为此,您应该只使用最少的过滤器,例如lowerCase
和类似solr.StandardTokenizerFactory
对此事一探究竟,怎么可能:Solr Analyzers, Tokenizers, and Token Filters