Lucene - JSON 对象的自定义 Analyzer/Parser?

Lucene - Custom Analyzer/Parser for JSON objects?

我需要一个非常具体的 Lucene 实现,它存储多个 "Properties" 字段和反序列化的 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 类型,其中至少一个 "Properties" 字段必须匹配查询中的所有值。 (例如查询“+user:tom +modifiedChars:3 +before:"text A",等等)

我有一些想法,但不知道从哪里开始。我要问的是实现此类实施的一些高级想法。自定义分析器可能与查询解析器一起使用? 将其视为一个开放式问题。欢迎所有建议。

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

为每个集合创建一个 "property" 字段。该值只是值的串联集,即“1/2/2015:johndoe:2:text a:text b”。

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

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

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

如果没有,则将文本放入另一个文档中。

如果想通过搜索来获取 "ID" 字段,那么上述的一些组合应该可以工作