拆分数据,索引和查询

时间:2014-08-04 16:13:55

标签: solr solr4

我在数据库中有一个包含2列的表,iddetail

id列包含唯一ID,detail列包含如下数据 -

  1. 20%B 30%C 50%
  2. B 50%D 50%
  3. X 10%A 40%Z 50%
  4. 我对数据库中的方式无能为力。

    我想让我的用户使用以下查询进行搜索 -

    1. A< 20. - 表示A小于20%的所有文件。
    2. B> 30,X> 5%。 - 表示B大于30且X大于5的所有文档。
    3. 我无法弄清楚tokenizer的组合,过滤以实现这一目标。

      我所做的是找到唯一类型(A,B,C,...)的总数,在Solr模式中为typeCode1 A创建了许多字段,{对于typeCode2等{1}}以及BtypeValue1等相应的值。如果typeValue2不适用于文档,那么{{1} }是A,因此它是typeCode1字段。我在DB中也有一个映射表,我查找用户输入的类型,然后获取Solr中的相应字段,然后搜索。

      编辑 - 添加更多细节

      获取来自DB的数据。我们说它是null

      然后我在typeValue1A 20% D 30% C 50%)的基础上分裂。所以我的数组中有3行。

      然后我检查数据库中类型的映射,找出哪个Solr字段名称对应哪种类型。

      我收到该字段后,我将%<space>提交至String.split("")A提交至typeCode120提交至typeValue1和{{1转到D等等。

      目前,我拥有的唯一类型总数为45,但是,它可能会增加,而且我目前的方法无法扩展。

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是为每个typeCode添加动态字段,例如A_code,其中20为值。这将允许您使用该字段,因为您在Solr中使用任何字段,并使用间隔,上/下查询,在字段上进行分面等。

<dynamicField name="*_code" type="int" indexed="true" stored="true" />

唯一的“真正”缺点是你的缓存大小会增加,因为每个字段你会得到一个内部缓存。此缓存将根据索引中的文档总数进行调整。对于像您描述的那样的小索引,只有45个不同的字段名称应该不是问题。