ElasticSearch几个搜索案例

时间:2017-07-27 09:53:18

标签: php mysql elasticsearch

我在MySQL中有下一个结构:

  1. 表格组 - idtitleuser_id
  2. 表关键字 - idtitle
  3. 表group_keyword - group_idkeyword_id
  4. 我搜索了5个案例:

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

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

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

      由于

1 个答案:

答案 0 :(得分:0)

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