搜索具有索引和值的子数组以在solr中返回文档

时间:2018-12-01 18:26:03

标签: arrays mongodb elasticsearch search solr

我具有以下格式的以下数据集,并且希望可以通过solr进行搜索。下面的示例每个文档的外观如何。

{
  'key': <unique key>,
  'val_arr': [
               ['laptop', 'macbook pro', '16gb', 'i9', 'spacegrey'],
               ['cellphone', 'iPhone', '4gb', 't2', 'rose gold'],
               ['laptop', 'macbook air', '8gb', 'i5', 'black'],
               ['router', 'huawei', '10x10', 'white'],
               ['laptop', 'macbook', '8gb', 'i5', 'silve']
             ]
}

我将获得带有元素值及其索引(每个请求2个元素)的搜索请求。 例如。 index1=0, val1=laptop, index2=2, val2=16gb,与上述给定文档中的数组之一匹配,因此将整个文档提取到搜索结果中。 我尝试使用copyField和自定义查询解析器,但会搜索跨子数组,即可能会获取4GB手机的笔记本电脑,而请求可能是4GB笔记本电脑。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果您仅执行完全匹配,请使用索引作为值的一部分来索引值,并使用字符串/未处理的字段类型:

val_arr: ["0_laptop", "1_macbook pro", "2_16gb", ...]

可以使用确切的索引,值组合-val_arr:0_laptop AND val_arr:2_16gb来查询。

如果您需要对该字段进行常规匹配(和处理/标记化),则可以使用动态字段名称代替:

"val_arr_0": "laptop",
"val_arr_1": "macbook pro",
"val_arr_2": "16gb",
..

然后查询字段-val_arr_0:laptop AND val_arr_2:16gb