1 概念与用法

动态字段可以指定一个通配符来扩展字段.

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

如上, 动态字段 *_i 能够匹配 a_ib_i 等字段.

这样就给我们提供了便利:

  1. 在忘记定义一个或多个相同类型的字段时, 可以直接用动态字段顶替
  2. 在一个含有很多个前缀相同字段的文档中, 使用动态字段作为分组

2 需求

索引每个车系下的每个城市的报价, 分为最高价和最低价.

两种解决方案:

  1. 将主键设为 serieid_cityid , 文档数在 60 万左右.
  2. 设置动态字段, 将每个城市的报价放在车系文档下, 文档数 2000 多. 单个文档平均字段数有 1500 个.

毫无疑问, 我们采用了第二种方法, 在返回数据的时候, 只需要指定 field 就能保证文档不会特别大

3 应用

3.1 schema file

<dynamicField name="public_price_min_*"  type="float"    indexed="true"  stored="true" required="false"/>
<dynamicField name="public_price_max_*"  type="float"    indexed="true"  stored="true" required="false"/>

3.2 api param

"responseHeader": {
    "status": 0,
    "QTime": 0,
    "params": {
        "q": "*:*",
        "fl": "publicprice_min_-1,publicprice_max_-1",
        "start": "0",
        "rows": "10",
        "wt": "json"
    }
}

4 参考文献

Last Updated 2017-04-04 二 18:21.
Render by hexo-renderer-org with Emacs 25.3.1 (Org mode 9.1.1)