【问题标题】:search sub-arrays with index and value to return document in solr搜索具有索引和值的子数组以在 solr 中返回文档
【发布时间】:2019-05-03 13:39:43
【问题描述】:

我有以下格式的数据集,我希望它可以通过 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 笔记本电脑的。任何帮助将不胜感激。

【问题讨论】:

    标签: arrays mongodb elasticsearch search solr


    【解决方案1】:

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

    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

    【讨论】:

    • 第一个解决方案对我有用,但我在一个字段下有多个数组。并且子数组的第一个值可以重复。我想这会导致混乱。搜索 0_laptop2_4gb 可以从 2 个不同的数组中找到这些,而我希望它们来自同一个数组。有什么想法吗?
    • 啊,我错过了您文档中的那部分,抱歉!将每个值数组索引为单独的文档可能是一种简单的选择,而不是将其作为多个字段保存在一个文档中。
    • 我想将每个数组作为单独的文档对我来说不是一个选项,因为我需要在匹配时返回整个文档而不仅仅是一个数组,而且一旦被破解就不可能重新收集多行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多