0

我需要一些关于 lucene 索引文件的帮助,我想,也许你们中的一些人可以帮助我。

我有这样的json:

[
{
    "Id": 4476,
    "UrlName": null,
    "PhoneData": [
        {
            "PhoneType": "O",
            "PhoneNumber": "0065898",
        },
        {
           "PhoneType": "F",
            "PhoneNumber": "0065898",
        }
    ],
    "Contact": [],
    "Services": [
        {
            "ServiceId": 10,
            "ServiceGroup": 2
        },
        {
            "ServiceId": 20,
            "ServiceGroup": 1
        }
    ],
}

]

添加前两个字段相对容易:

// add lucene fields mapped to db fields
        doc.Add(new Field("Id", sampleData.Id.Value.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
        doc.Add(new Field("UrlName", sampleData.UrlName.Value ?? "null" , Field.Store.YES, Field.Index.ANALYZED));

但是我如何将 PhoneData 和 Services 添加到索引中,以便它可以连接到唯一的 Id?

4

1 回答 1

2

对于索引 JSON 对象,我会这样:

  1. 将整个值存储在有效负载字段下,例如命名为$json。该字段将被存储但不被索引。
  2. 为每个(可索引的)属性(可能是嵌套的)创建一个可索引字段,其名称为一个类似 XMLPath的表达式来标识该属性,例如PhoneData.PhoneType

如果可以对所有嵌套属性进行索引,那么这很简单,只需遍历所有嵌套属性即可生成此可索引字段。

但是,如果您不想对所有这些都进行索引(更现实的情况),那么如何知道哪个属性是可索引的则是另一个问题;在这种情况下,您可以:

  • 从客户端接受存储文档时要创建的索引字段的路径表达式,或
  • 使用JSON Schema来描述您的数据(假设您的 JSON 记录具有通用模式),并使用自定义属性对其进行扩展,该属性允许您标记哪些属性是可索引的。

我创建了一个库来做这个(以及更多),也许可以帮助你。

您可以在https://github.com/brutusin/flea-db查看

于 2015-02-27T00:15:04.363 回答