我需要一个非常具体的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"等)
我有一些想法,但我不知道从哪里开始。我要问的是实现这种实施的一些高层次想法。自定义分析器可能与查询解析器一起使用? 认为这是一个开放式问题。欢迎提出所有建议。
答案 0 :(得分:0)
如果您总是搜索完整的值集......
创建"属性"每组的字段。该值只是连接的值集,即" 1/2/2015:johndoe:2:text a:text b"。
或者......为每个集合创建一个单独的文档。这将允许您搜索不同的值组合,而不会混淆不同的集合。
是的,这可能意味着重复文本字段。如果它不大,那么我就不会太在意(特别是如果你不使用"存储"字段)。
您是否需要在查询中组合文本和属性? ("文字:ipsum AND property:xxx")
如果没有,那么将文本放在另一个文档中。
如果想要搜索以获得" ID"领域然后上面的一些组合应该工作