我在MySQL中有下一个结构:
id、title、user_idid,titlegroup_id,keyword_id我查了5个案件:
title = "keyword"title = "keyword"完全匹配title like "keyword%"部分匹配title like "%keyword%"部分匹配title like "%keyword%"部分匹配这些查询合并成一个查询。对于每个子查询,它都会附加一个名为priority的列,在该列上进行排序。
我的问题是:我应该如何配置ElasticSearch来完成上述的工作,或者如何构建对弹性的查询以获得结果?我问,因为这个查询在Mysql上非常慢,所以我们做了许多优化,添加了索引,拆分了表等等,所有的优化结果都是临时的。
谢谢
发布于 2017-07-27 10:30:27
您是否希望分析您的关键字字段?一定要有5个不同的案子吗?
您必须确定您想要的可能的查询类型。
因为通配符查询:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html
管理所有5种情况的搜索(对于未分析的字段,这意味着关键字子术语没有标记,ES使用defalt分析器搜索关键字属性,该分析器使用简单的空格拆分单词,除非指定自定义分析器)。
如果您想要更灵活的东西,性能不是问题(分析属性),那么可以使用ngram分析:https://www.elastic.co/guide/en/elasticsearch/reference/5.5/analysis-ngram-tokenizer.html。
这一个标记您的子术语,这意味着它打破了多个字符取决于您的ngram配置。
当然,您的文档映射应该在每种情况下指定解析器:
通配符研究==> not_analyzed
ngram研究==>ngram
PS:在浏览ES文档时要注意。ES版本规范非常重要,因为版本之间存在大量的折旧:)。在右边选择安装的主要版本,然后浏览。
https://stackoverflow.com/questions/45347267
复制相似问题