Lucene - JSON对象的自定义分析器/解析器?
问题描述:
我有一个非常具体的Lucene实现的要求,它存储多个带有反序列化JSON字符串的“属性”字段。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的其中至少一个“属性”字段必须匹配所有的值查询。 (例如,查询“+ user:tom + modifiedChars:3 + before:”text A“等)
我有一些想法,但我不知道从哪里开始。实现这样的实现。自定义分析可能与查询分析器使用? 认为这是一种开放式的问题。所有的建议都欢迎。
答
如果将总是搜索完整的一套价值观。
为每组创建一个“属性”字段,该值只是一组连接的值,即“1/2/2015:johndoe:2:text a:text b”。
或者...为每组创建单独的文档。这将允许您搜索不同组合的值,而不会混淆不同的组。
是的,这可能意味着复制了文本字段。如果它不大,那么我不会太在意(特别是如果你不使用“存储”字段)。
您是否需要在查询中结合文本和属性? (“text:ipsum AND property:xxx”)
如果没有,则将文本放在另一个文档中。
如果想法是为了获得“ID”字段进行搜索,那么上述的某些组合应该工作