本文目录一览:

Elasticsearch排序

ElasticSearch中的关于对象数组查询,请注意要正确使用Nested类型,使用不当会导致检索时结果不正确。

elasticsearchnested查询的简单介绍elasticsearchnested查询的简单介绍


elasticsearchnested查询的简单介绍


下面的例子就容易做到:

该查询会返回所有在title字段上至少命中一个词项的文档,并且基于section数据排序

也可以通过添加查询sort部分的missing属性为那些section字段缺失的文档定制排序行为

某些文档的release-dates字段里面储存了多个电影上映日期(同一部电影在不同的上映日期不同)我们可以构造查询请求:

例子中 es将基于每个文档的release_dates字段的小值进行排序

mode参数可以设置为以上值:

后面两个选项只对数值类型有效

es提供了基于坐标系数据的排序,我们通过一个实例了解这种类型的排序

例如,要查找特点里离自己近的一个机构

我们使用下面的这个映射:

查询如图:

查询结果:

我们可以看到,返回结果包含这个值:“sort”:[0.0]这是因为返回文档的地理坐标和查询中的坐标匹配

还可以设置mode属性为max,min,g

例如g代表:此时基于字段中的地理位置坐标与查询坐标的距离的均值排序

继续嵌套对象的排序, 对以下两种情形都适用 :

查询:

查询返回结果按照嵌套对象的usert字段小值降序

如果将子文档视为一种数据类型,则可以将查询简化为如下形式:

当我们使用对象类型时,可以简化查询,这是因为整个对象结构被当成一个lucene文档进行储存

有些时候,使用 nested_path 属性会更加便捷

按照下面的方式构造查询:

我们也可以使用 nested_filter 参数,改参数只对嵌套文档有效,利用这个参数,我们可以在排序前就已经通过一个过滤器在检索期排除了某些文档,而不是检索结果文档集中过滤它们

(注:内容整理自《深入理解Elasticsearch》)

ElasticSearch常用查询方法总结

ElasticSearch中的关于对象数组查询,请注意要正确使用Nested类型,使用不当会导致检索时结果不正确。

下面的例子就容易做到:

该查询会返回所有在title字段上至少命中一个词项的文档,并且基于section数据排序

也可以通过添加查询sort部分的missing属性为那些section字段缺失的文档定制排序行为

某些文档的release-dates字段里面储存了多个电影上映日期(同一部电影在不同的上映日期不同)我们可以构造查询请求:

例子中 es将基于每个文档的release_dates字段的小值进行排序

mode参数可以设置为以上值:

后面两个选项只对数值类型有效

es提供了基于坐标系数据的排序,我们通过一个实例了解这种类型的排序

例如,要查找特点里离自己近的一个机构

我们使用下面的这个映射:

查询如图:

查询结果:

我们可以看到,返回结果包含这个值:“sort”:[0.0]这是因为返回文档的地理坐标和查询中的坐标匹配

还可以设置mode属性为max,min,g

例如g代表:此时基于字段中的地理位置坐标与查询坐标的距离的均值排序

继续嵌套对象的排序, 对以下两种情形都适用 :

查询:

查询返回结果按照嵌套对象的usert字段小值降序

如果将子文档视为一种数据类型,则可以将查询简化为如下形式:

当我们使用对象类型时,可以简化查询,这是因为整个对象结构被当成一个lucene文档进行储存

有些时候,使用 nested_path 属性会更加便捷

按照下面的方式构造查询:

我们也可以使用 nested_filter 参数,改参数只对嵌套文档有效,利用这个参数,我们可以在排序前就已经通过一个过滤器在检索期排除了某些文档,而不是检索结果文档集中过滤它们

(注:内容整理自《深入理解Elasticsearch》)

基于词项的查询:不需要分析阶段,对单个词项进行作,在倒排索引中查找准确词项。

Terms Query:在给定字段内查询并返回准确符合一个或多个词项的查询结果。

Fuzzy Query:返回与给定词项 相似 的结果。相似程度用Lnshtein编辑距离来衡量。

1编辑距离指一个字符的变化,包括:

Fuzzy Query会创建一系列可能出现的,编辑距离为1的变化后的词项,然后用这些词项进行查询以获得终结果。

Wildcard Query:返回符合通配符表达式的查询结果。使用?代替单个字符,代替零个或几个字符。

基于全文的查询:高层查询,要先了解字段映射的信息。如果查询一个未分析的值字符串字段,会将整个查询字符串作为单个词项对待。如果查询一个已分析的值字符串字段,会先将查询字符串传递到一个合适的分析器, 然后生成一个供查询的词项列表。

Match Query:是一个高级全文查询,它既能处理全文字段,又能处理字段。Match Query主要的应用场景就是进行全文搜索,但无论需要查询什么字段, Match Query都应该会是的查询方式。

Query String Query:使用句法将给定的查询条件按And或Or的方式进行分析和拆分,返回包含查询字符串的结果。

Match Phrase Query:会分析文本,再从分析后的文本中生成phrase查询。

复合查询:组合查询语句,使查询结果符合多项标准,支撑更复杂的查询条件。

Bool Query:对查询语句进行与或非的组合。包含must(and), should(or), must_not(not)。

Table1 Comparison of ES Query Mods

Reference List:

elasticsearch 获取匹配属于哪个字段

ElasticSearch中的关于对象数组查询,请注意要正确使用Nested类型,使用不当会导致检索时结果不正确。

下面的例子就容易做到:

该查询会返回所有在title字段上至少命中一个词项的文档,并且基于section数据排序

也可以通过添加查询sort部分的missing属性为那些section字段缺失的文档定制排序行为

某些文档的release-dates字段里面储存了多个电影上映日期(同一部电影在不同的上映日期不同)我们可以构造查询请求:

例子中 es将基于每个文档的release_dates字段的小值进行排序

mode参数可以设置为以上值:

后面两个选项只对数值类型有效

es提供了基于坐标系数据的排序,我们通过一个实例了解这种类型的排序

例如,要查找特点里离自己近的一个机构

我们使用下面的这个映射:

查询如图:

查询结果:

我们可以看到,返回结果包含这个值:“sort”:[0.0]这是因为返回文档的地理坐标和查询中的坐标匹配

还可以设置mode属性为max,min,g

例如g代表:此时基于字段中的地理位置坐标与查询坐标的距离的均值排序

继续嵌套对象的排序, 对以下两种情形都适用 :

查询:

查询返回结果按照嵌套对象的usert字段小值降序

如果将子文档视为一种数据类型,则可以将查询简化为如下形式:

当我们使用对象类型时,可以简化查询,这是因为整个对象结构被当成一个lucene文档进行储存

有些时候,使用 nested_path 属性会更加便捷

按照下面的方式构造查询:

我们也可以使用 nested_filter 参数,改参数只对嵌套文档有效,利用这个参数,我们可以在排序前就已经通过一个过滤器在检索期排除了某些文档,而不是检索结果文档集中过滤它们

(注:内容整理自《深入理解Elasticsearch》)

基于词项的查询:不需要分析阶段,对单个词项进行作,在倒排索引中查找准确词项。

Terms Query:在给定字段内查询并返回准确符合一个或多个词项的查询结果。

Fuzzy Query:返回与给定词项 相似 的结果。相似程度用Lnshtein编辑距离来衡量。

1编辑距离指一个字符的变化,包括:

Fuzzy Query会创建一系列可能出现的,编辑距离为1的变化后的词项,然后用这些词项进行查询以获得终结果。

Wildcard Query:返回符合通配符表达式的查询结果。使用?代替单个字符,代替零个或几个字符。

基于全文的查询:高层查询,要先了解字段映射的信息。如果查询一个未分析的值字符串字段,会将整个查询字符串作为单个词项对待。如果查询一个已分析的值字符串字段,会先将查询字符串传递到一个合适的分析器, 然后生成一个供查询的词项列表。

Match Query:是一个高级全文查询,它既能处理全文字段,又能处理字段。Match Query主要的应用场景就是进行全文搜索,但无论需要查询什么字段, Match Query都应该会是的查询方式。

Query String Query:使用句法将给定的查询条件按And或Or的方式进行分析和拆分,返回包含查询字符串的结果。

Match Phrase Query:会分析文本,再从分析后的文本中生成phrase查询。

复合查询:组合查询语句,使查询结果符合多项标准,支撑更复杂的查询条件。

Bool Query:对查询语句进行与或非的组合。包含must(and), should(or), must_not(not)。

Table1 Comparison of ES Query Mods

Reference List:

elasticsearch的查询有两部分组成:query and filter。

ElasticSearch中的关于对象数组查询,请注意要正确使用Nested类型

ElasticSearch中的关于对象数组查询,请注意要正确使用Nested类型,使用不当会导致检索时结果不正确。