【问题标题】:ElasticSearch several search casesElasticSearch几个搜索案例
【发布时间】:2018-01-02 23:24:30
【问题描述】:

我在 MySQL 中有下一个结构:

  1. 表组 - idtitleuser_id
  2. 表格关键字 - id, title
  3. 表组关键字 - 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上很慢,我们做了很多优化,加了索引,分表等等,所有的优化结果都是暂时的。

谢谢

【问题讨论】:

    标签: php mysql elasticsearch


    【解决方案1】:

    您是否希望分析您的关键字字段? 它必须是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 版本规范非常重要,因为版本之间有很多折旧:)。在右侧选择您安装的主要版本,然后浏览。

    【讨论】:

      猜你喜欢
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      相关资源
      最近更新 更多