lucene复杂数据类型存储

Lucene以领域作为键值存储单元,字段的值可以为字符串,int,长,双浮子和byte[]存储,开发过程中往往需要存储复杂的数据类型,例如列表,地图等。下面将会讲解如何将复杂的对象转换为单一的键值存储到Lucene中。


Lucene支持多域值存储,同一个文档可以存储多个键相同的领域,简单理解就是Lucene支持键=值和键=[value1, value2]两种方式存储。我们需要做的就是将对象转换为键=值或者关键=(value1, value2,…)的格式存储。


例如,用户用户表的一行数据为

{

,,,,“user_id":“00000001”,

,,,,“user_name":“test1",

,,,,“age": 30日

,,,,“sex": 1,

,,,,“emails": [“test1_1@126.com",“test1_2@126.com"],

,,,,“families":{

,,,,,,,,“children":[

,,,,,,,,,,,, {

,,,,,,,,,,,,,“name":“son1",

,,,,,,,,,,,,,,“age": 5,

,,,,,,,,,,,,,,“sex": 1、

,,,,,,,,,,,,,,“birth":“2013 - 08年- 08 -“

,,,,,,,,,,,,},

,,,,,,,,,,,, {

,,,,,,,,,,,,,“name":“son2",

,,,,,,,,,,,,,,“age": 1、

,,,,,,,,,,,,,,“sex": 1、

,,,,,,,,,,,,,,“birth":“2017 - 01 - 01 -“

,,,,,,,,,,,,}

,,,,,,,,,

,,,,,,,,“partner": {

,,,,,,,,,,,,“name":“wife",

,,,,,,,,“age": 28日,

,,,,,,,,“sex": 2,

,,,,,,,,“birth":“1990 - 01 - 01 -“

,,,,,,,,}

,,,,}

,,,,“state":“A",

,,,,“create_time": 15648784644,

,,,,“update_time": 15648784644

}

这些数据,除了家庭之外,其他字段可以直接存储.台湾本身可以直接转换为json字符串存储,但是这样就无法使用家庭中的数据过滤条件,例如,查询儿童年龄年龄大于等于5的用户。可以将家庭做拆分,转换为families.children和families.partner存储。拆分后的键值为:

user_id=?0000001“

user_name=皌est1"

=30岁性=1

邮件=[“test1_1@126.com",“test1_2@126.com")

families.children.name=[“son1",“son2"]

families.children.age=[5, 1]

families.children.sex=[1]

families.children.birth=(“2013 - 08年- 08 -“,“2017 - 01 - 01 -“]

families.partner.name=皐ife"

families.partner.age=28

families.partner.sex=2

families.partner.birth=?990 - 01 - 01 -“

状态=癆"

create_time=15648784644

update_time=15648784644


这样,将一个复杂的对象转换为了多个键值存储。查询儿童年龄年龄大于等于5的用户只需要设置条件NumericRangeQuery.newIntRange (“families.children.age" 5整数。MAX_VALUE,真的,真的)即可。


上面讲解的是如何将一个复杂类型拆分为多个字段存储,如果需要使用lucene存储数据,可以另外使用列存储,例如,以“_l"开始表示存储的json数组,“_m"开始表示存储的json对象,上面的用户对象可以拆分为

user_id=?0000001“

user_name=皌est1"

=30岁性=1

邮件=[“test1_1@126.com",“test1_2@126.com")

families.children.name=[“son1",“son2"]

families.children。年龄=[5,1]

families.children。性别=[1]

families.children.birth=(“2013 - 08年- 08 -“,“2017 - 01 - 01 -“]

families.partner.name=皐ife"

families.partner。年龄=28

families.partner。性=2

families.partner.birth=?990 - 01 - 01 -“

状态=癆"

create_time=15648784644

update_time=15648784644

_mfamilies=皗\ \“儿童”;null

lucene复杂数据类型存储