gpt4 book ai didi

mysql - 使用 Mysql 进行 ElasticSearch 数据建模

转载 作者:行者123 更新时间:2023-12-03 00:45:15 26 4
gpt4 key购买 nike

我正在研究 Elasticsearch 并尝试使用 mysql 表进行建模。
例如,我有下面的 Mysql 表。
书 table

  • 编号
  • 标题
  • 摘要
  • 发布者 ID

  • ex) 书 table

    编号 |标题 |摘要 |发布者 ID
    3 |书名A |一本关于 Elasticsearch 的书。 | 12

    作者表
  • 编号
  • 姓名
  • 国家
  • book_id(来自 Book 表的 ID)

  • ex) 作者表

    编号 |姓名 |国家 | book_id
    1 |亚历克斯 |韩国 | 3
    2 |约翰 |美国 | 3

    作者可能不止一个人。
    发布者表
  • 编号
  • 姓名

  • ex) 发布者表

    编号 |姓名
    12 |打包酒吧

    在我看来,我可以像下面这样转换为 Elasticsearch 索引。
    图书索引
  • id 整数
  • 标题字符串
  • 抽象字符串
  • 作者数组(来自作者索引的 ID。作者可能不止一个。)
  • 发布者 int(id 形式发布者索引)

  • 作者索引
  • id 整数
  • 名称字符串
  • 国家字符串

  • 出版商索引
  • id 整数
  • 名称字符串

  • 我需要做的是,搜索书名和摘要并获取作者的 ID。
    然后显示作者列表。
    对于mysql,我会这样做。
    Select * from authors where id in (select authors_id from book where match(title,abstract) against('${keyword}' IN BOOLEAN MODE))
    我怎样才能为 Elasticsearch 做到这一点?
    有没有更好的建模方法?
    我也想知道怎么查询
    首先从书籍索引中搜索作者 ID,然后再次使用作者的这些 ID 进行搜索??
    或任何其他解决方案???

    最佳答案

    正如其他 ES 专家所指出的,使用 Elasticsearch(ES) 中的单个索引很容易实现这一点,我可能无法提供正确的 ES 查询,但我下面的示例为您提供了有关如何对数据进行建模和查询的想法。
    索引映射

    {
    "mappings": {
    "properties": {
    "title": {
    "type": "text"
    },
    "abstract":{
    "type" : "text"
    },
    "author" :{
    "type" : "text",
    "fielddata" : true // instead of this, you can use `keyword` field for better perf, this is just for ex
    }
    }
    }
    }
    索引示例文档
    {
    "title" : "hello world",
    "abstract" : "hello world is common in computer programming",
    "author" : ["sehun, stackoverflow"]
    }

    {
    "title" : "foo bar",
    "abstract" : "foo bar is common in computer programming",
    "author" : ["opster, stackoverflow"]
    }
    搜索查询以搜索 titleabstract和作者字段上的 agg
    {
    "query": {
    "multi_match": {
    "query": "common",
    "fields": [
    "title",
    "abstract"
    ]
    }
    },
    "aggs": {
    "Cities": {
    "terms": {
    "field": "author"
    }
    }
    }
    }
    搜索结果
    hits": [
    {
    "_index": "internaledgepre",
    "_type": "_doc",
    "_id": "1",
    "_score": 0.18232156,
    "_source": {
    "title": "foo bar",
    "abstract": "foo bar is common in computer programming",
    "author": [
    "opster, stackoverflow"
    ]
    }
    },
    {
    "_index": "internaledgepre",
    "_type": "_doc",
    "_id": "2",
    "_score": 0.18232156,
    "_source": {
    "title": "hello world",
    "abstract": "hello world is common in computer programming",
    "author": [
    "sehun, stackoverflow"
    ]
    }
    }
    ]
    },
    "aggregations": {
    "Cities": {
    "doc_count_error_upper_bound": 0,
    "sum_other_doc_count": 0,
    "buckets": [
    {
    "key": "stackoverflow",
    "doc_count": 2
    },
    {
    "key": "opster",
    "doc_count": 1
    },
    {
    "key": "sehun",
    "doc_count": 1
    }
    ]
    }
    }

    关于mysql - 使用 Mysql 进行 ElasticSearch 数据建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63339962/

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