我在数据库中有一个包含2列的表,id
和detail
。
id
列包含唯一ID,detail
列包含如下数据 -
我对数据库中的方式无能为力。
我想让我的用户使用以下查询进行搜索 -
我无法弄清楚tokenizer的组合,过滤以实现这一目标。
我所做的是找到唯一类型(A,B,C,...)的总数,在Solr模式中为typeCode1
A
创建了许多字段,{对于typeCode2
等{1}}以及B
,typeValue1
等相应的值。如果typeValue2
不适用于文档,那么{{1} }是A
,因此它是typeCode1
字段。我在DB中也有一个映射表,我查找用户输入的类型,然后获取Solr中的相应字段,然后搜索。
编辑 - 添加更多细节
获取来自DB的数据。我们说它是null
。
然后我在typeValue1
(A 20% D 30% C 50%
)的基础上分裂。所以我的数组中有3行。
然后我检查数据库中类型的映射,找出哪个Solr字段名称对应哪种类型。
我收到该字段后,我将%<space>
提交至String.split("")
,A
提交至typeCode1
,20
提交至typeValue1
和{{1转到D
等等。
目前,我拥有的唯一类型总数为45,但是,它可能会增加,而且我目前的方法无法扩展。
答案 0 :(得分:1)
一种可能的解决方案是为每个typeCode添加动态字段,例如A_code
,其中20
为值。这将允许您使用该字段,因为您在Solr中使用任何字段,并使用间隔,上/下查询,在字段上进行分面等。
<dynamicField name="*_code" type="int" indexed="true" stored="true" />
唯一的“真正”缺点是你的缓存大小会增加,因为每个字段你会得到一个内部缓存。此缓存将根据索引中的文档总数进行调整。对于像您描述的那样的小索引,只有45个不同的字段名称应该不是问题。