0%

相关阅读: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 去查询匹配多个字段,例如检索字段 subjectmessage 中包含文本 this is a test的文档:

1
2
3
4
5
6
7
8
9
GET /_search
{
"query": {
"multi_match" : {
"query": "this is a test",
"fields": [ "subject", "message" ]
}
}
}
阅读全文 »

如下我们新建一个 blogs 索引并添加两个文档:

1
2
3
4
5
6
7
8
9
10
11
PUT /blogs/_doc/1
{
"title": "Quick brown rabbits",
"body": "Brown rabbits are commonly seen."
}

PUT /blogs/_doc/2
{
"title": "Keeping pets healthy",
"body": "My quick brown fox eats rabbits on a regular basis."
}
阅读全文 »

1. Query 和 filter Context

相关阅读: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 前缀查询。

阅读全文 »

1. Term-level queries

相关阅读:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/term-level-queries.html

Term 是表达语意的最小单位。搜索和利用统计语言模型进行自然处理都需要处理 Term,其具备如下特点:

  • Term Level Query 包含:Term Query / Range Query / Exists Query / Prefix Query / Wildcard Query
  • 在 ES 中,Term 查询对输入不做分词。会将输入作为一个整体,在倒排索引中查找准确的词项。且使用相关度算分公式会为每个包含该词项的文档进行相关度算分。
  • 可以通过 Constant Score 将查询转换成一个 Filtering,避免算分,并利用缓存,以提高性能
阅读全文 »

1. Index Templates

相关阅读:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/indices-templates.html

Index Templates 会帮助你设定 Mappings 和 Settings,并按照一定的规则自动匹配到新创建的索引上。其符合如下几点规则:

  • 模板仅在一个索引被新创建时才会产生作用,修改模板不会影响已创建的索引;
  • 可以设定多个索引模板,符合指定规则的索引会将模板进行 “merge”,其中模板所指定的 order 可以控制模板的合并顺序,order 值较大者的会覆盖较小者。
  • 应用创建索引时,用户所指定的 Settings 和 Mappings 会覆盖之前模板中的设定。
阅读全文 »

1. 多字段特性

相关阅读:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/mapping-params.html

默认情况 ElasticSearch 会对 text 类型字段默认增加 keyword 类型子字段,keyword 类型是 Exact Values,即精确值,仅支持精确匹配查询。Exact Values 不会被 ElasticSearch 做分词处理,而是直接索引。而 text 类型是全文本,即非结构化的文本数据。

阅读全文 »