gpt4 book ai didi

php - ElasticSearch 几种搜索案例

转载 作者:行者123 更新时间:2023-11-30 21:55:30 24 4
gpt4 key购买 nike

我在 MySQL 中有下一个结构:

  1. 表组 - idtitleuser_id
  2. 表格关键字 - id, title
  3. 表 group_keyword - group_id, keyword_id

我搜索了 5 个案例:

  1. 按组标题完全匹配 title = "keyword"
  2. 按关键字标题完全匹配 title = "keyword"
  3. 按组标题部分匹配 title like "keyword%"
  4. 按组标题部分匹配 title like "%keyword%"
  5. 按关键字标题部分匹配 title like "%keyword%"

这些查询合并为一个查询。对于每个子查询,它附加一个名为 priority 的列,在该列上进行排序。

我的问题是:我应该如何配置 ElasticSearch 来执行上述情况,或者我应该如何构建对 Elastic 的查询以获得结果?请问,因为这个查询在Mysql上很慢,我们做了很多优化,加索引,分表等等,所有的优化结果都是临时的。

谢谢

最佳答案

您是否希望分析您的关键字字段?是否必须是 5 个不同的案例?

您必须确定您想要哪种类型的可能查询。

因为通配符查询:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html

管理所有 5 个案例的搜索(对于未分析的字段,这意味着关键字子术语未标记化,ES 使用默认分析器搜索关键字属性,该分析器使用简单的空格拆分单词,除非您指定自定义分析器)。

如果您想要更灵活的东西并且性能不是问题(分析属性),那么您可以使用 ngram 分析:https://www.elastic.co/guide/en/elasticsearch/reference/5.5/analysis-ngram-tokenizer.html

这个标记化您的子术语,这意味着它根据您的 ngram 配置将其分解为多个字符。

您的文档映射当然应该在每种情况下指定分析器:

通配符研究 ==> not_analyzed

ngram 研究 ==>ngram

PS:浏览ES文档时要注意。 ES 版本规范非常重要,因为版本之间有很多贬值:)。在右侧选择安装的主要版本,然后浏览。

关于php - ElasticSearch 几种搜索案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45347267/

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