相关阅读:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-function-score-query.html
Elasticsearch 默认会以⽂档的相关度算分进⾏排序, 可以通过指定⼀个或者多个字段进⾏排序。使⽤相关度算分(score)排序,不能满⾜某些特定条件,且无法针对相关度,对排序实现更多的控制。
笨鸟先飞
相关阅读:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-function-score-query.html
Elasticsearch 默认会以⽂档的相关度算分进⾏排序, 可以通过指定⼀个或者多个字段进⾏排序。使⽤相关度算分(score)排序,不能满⾜某些特定条件,且无法针对相关度,对排序实现更多的控制。
相关阅读:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-multi-match-query.html
ElasticSearch 提供 multi_match 去查询匹配多个字段,例如检索字段 subject
和 message
中包含文本 this is a test
的文档:
1 | GET /_search |
如下我们新建一个 blogs 索引并添加两个文档:
1 | PUT /blogs/_doc/1 |
相关阅读:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-filter-context.html
在 ElasticSearch 中,有 Query 和 Filter 两种不同的 Context,其中 Query Context 会进行相关性算分,而 Filter Context 则不需要进行算分,其可以利用 Cache 一次获得更好的性能。
例如在 bool query 中的 must_not 和 filter 即为 Filter Context,而一般的查询都会进行相关性算分,即为 Query Context ,其会计算出 _score 的值。
日期、布尔类型和数字都是结构化数据,文本也可以是结构化的,比如彩色笔可以有离散的颜色集合:红(red)、绿(green)、蓝(blue)。或者如一个博客标记的标签,如分布式(distributed)和搜索(search)等。
结构化搜索(Structured search)是指对结构化数据的搜索。布尔、时间、日期和数字这类结构化数据有精确的格式,我们可以对这些格式进行逻辑操作。包括比较数字或时间的范围以及判定两个值的大小等。而对于结构化文本可以做精确匹配或者部分匹配,比如采用 Term 查询或者 Prefix 前缀查询。
相关阅读:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/term-level-queries.html
Term 是表达语意的最小单位。搜索和利用统计语言模型进行自然处理都需要处理 Term,其具备如下特点:
相关阅读:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/indices-templates.html
Index Templates 会帮助你设定 Mappings 和 Settings,并按照一定的规则自动匹配到新创建的索引上。其符合如下几点规则:
相关阅读:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/mapping-params.html
默认情况 ElasticSearch 会对 text 类型字段默认增加 keyword 类型子字段,keyword 类型是 Exact Values,即精确值,仅支持精确匹配查询。Exact Values 不会被 ElasticSearch 做分词处理,而是直接索引。而 text 类型是全文本,即非结构化的文本数据。
相关阅读:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/mapping-params.html
ElasticSearch 本身会对加入的索引自定创建对应的 mapping,即 Dynamic Mapping,当然我们也可以显式的定义 mapping,例如: