Lucene - 用于JSON对象的自定义分析器/解析器?

时间:2016-01-13 14:27:09

标签: lucene lucene.net

我需要一个非常具体的Lucene实现,它存储多个"属性"带有反序列化JSON字符串的字段。

示例:

Document:
ID: "99"
Text: "Lorepsum Ipsum"
Properties: "{
    "lastModified": "1/2/2015",
    "user": "johndoe",
    "modifiedChars": 2,
    "before": "text a",
    "after": "text b",
}"
Properties:"{
    "lastModified": "1/2/2013",
    "user": "johncotton",
    "modifiedChars": 6,
    "before": "text aa",
    "after": "text bbb",
}"
Properties: "{
    "lastModified": "1/3/2015",
    "user": "johnmajor",
    "modifiedChars": 3,
    "before": "text aa",
    "after": "text b",
}"

我知道ElasticSearch和Solr有实现在JSON对象中查找但我使用Lucene的核心API(3.0.5)。

我的目标是使用lucene的API以及一些添加的实现来搜索JSON字符串,例如:

构建一种BooleanQuery类型,其中至少有一个"属性"字段必须匹配查询中的所有值。 (例如查询" +用户:tom + modifiedChars:3 +之前:"文本A"等)

我有一些想法,但我不知道从哪里开始。我要问的是实现这种实施的一些高层次想法。自定义分析器可能与查询解析器一起使用? 认为这是一个开放式问题。欢迎提出所有建议。

1 个答案:

答案 0 :(得分:0)

如果您总是搜索完整的值集......

创建"属性"每组的字段。该值只是连接的值集,即" 1/2/2015:johndoe:2:text a:text b"。

或者......为每个集合创建一个单独的文档。这将允许您搜索不同的值组合,而不会混淆不同的集合。

是的,这可能意味着重复文本字段。如果它不大,那么我就不会太在意(特别是如果你不使用"存储"字段)。

您是否需要在查询中组合文本和属性? ("文字:ipsum AND property:xxx")

如果没有,那么将文本放在另一个文档中。

如果想要搜索以获得" ID"领域然后上面的一些组合应该工作