gpt4 book ai didi

c# - Elasticsearch Nest-搜索动态数据

转载 作者:行者123 更新时间:2023-12-02 23:20:23 25 4
gpt4 key购买 nike

我有一个相当简单的模型自动映射的索引。

唯一的复杂性是动态值列表,用户可以在其中创建自己的数据。每个值都有一个标题(数据是什么)和一个值。例如,数组中的2个项目可能是:

项目1

  • 标题-名字
  • 值-约翰

  • 项目2
  • 标题-姓
  • 值-托马斯

  • 其中可能有很多,我们不知道它们会是什么。用户可以在CMS中添加它们。

    我的类(class)如下所示:
    public class SearchRequest
    {
    public int DocumentId { get; set; }
    public string DocumentName { get; set; }

    public List<DynamicTextValue> DynamicTextValues { get; set; }
    }

    public class DynamicTextValue
    {
    public string Title { get; set; }
    public string Value { get; set; }
    }

    通用映射如下所示:
    "documentId": {
    "type": "integer"
    },
    "documentName": {
    "type": "text"
    },
    "dynamicTextValues": {
    "properties": {
    "value": {
    "type": "text"
    },
    "title": {
    "type": "text",
    "fields": {
    "keyword": {
    "type": "keyword",
    "ignore_above": 256
    }
    }
    }
    }
    }

    我也有带有类似概念的dynamicNumericValues和dynamicDateValues。

    问题是当我想搜索其中一种动态类型时。假设我搜索“Thomas”姓。我添加2个“必须”搜索:
  • 标题=姓
  • 值= Thomas

  • 要么
  • q = dynamicTextValues.title:姓氏和dynamicTextValues.value:托马斯

  • 这是行不通的,因为这两个字段是相互独立的。实际上,它将返回任何值为Thomas的记录(例如Thomas也是一个名字),只要它在同一记录中的某个位置包含姓氏的标题。我需要它仅在“标题是姓氏”的同一列表项上返回“值”是“托马斯”的地方。

    有什么办法可以做到吗?还是有更好的方法来构造数据以实现这些结果?我考虑过(作为一种技巧)将“标题”和“值”连接起来并搜索“Surname Thomas”,但这不能解决数字和日期字段的问题。

    最佳答案

    DynamicTextValue需要映射为 nested data type才能起作用。 nested数据类型在内部映射为单独的文档,在这种情况下,保持属性titlevalue之间的关系。

    关于c# - Elasticsearch Nest-搜索动态数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50171898/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com