admin 管理员组

文章数量: 887032


2024年1月5日发(作者:构词法conversion)

es的lucene语法

Elasticsearch(简称ES)是一个高度可扩展的开源全文搜索和分析引擎,它提供了强大的搜索和分析功能。为了实现这些功能,ES使用了一个名为Lucene的开源全文搜索引擎库。Lucene是一个高度优化的全文搜索引擎库,它提供了许多用于搜索、分析、索引和优化搜索结果的API和工具。在ES中,Lucene的语法被广泛使用,用于构建搜索查询和过滤条件。

一、基本查询语法

在ES中,Lucene提供了许多基本查询语法,用于构建搜索查询。以下是一些常用的基本查询语法:

1.匹配查询(MatchQuery):用于在指定字段上查找与给定文本匹配的项。语法如下:

```php

match('field','value')

```

例如:

```arduino

match('title','searchterm')

```

2.短语查询(PhraseQuery):用于在指定字段中查找包含给定文本的项。语法如下:

```php

'field''value'

```

例如:

```arduino

'title''searchterm'

```

3.范围查询(RangeQuery):用于在指定字段上查找具有指定范围的项。语法如下:

```scss

'field''gte''lt''value'

```

例如:

```scss

age>=18&&age<30

```

4.复合查询(BoolQuery):用于将多个查询组合在一起,并返回同时满足所有查询条件的项。语法如下:

```csharp

{!pe1query1}[!pe2query2]...{bool(must/should/mustnot)}

第 1 页 共 2 页

```

例如:

```vbnet

{!match'title''searchterm'}AND{match'content''query'}

```

以上是一些常用的基本查询语法,但ES还提供了许多其他查询类型,如位置查询、正则表达式查询、多重查询等。您可以在ES官方文档中找到更详细的信息和示例。

二、过滤查询语法

除了基本查询外,Lucene还提供了许多过滤条件,用于在搜索结果中过滤不符合条件的项。以下是一些常用的过滤条件:

1.布尔过滤(BoolFilter):用于将多个过滤条件组合在一起,并返回同时满足所有条件的项。语法如下:

```css

{!bool(must/should/}

```

例如:

```vbnet

{!age>=18age<30}age:18-30*title:searchterm*

```

2.范围过滤(RangeFilter):用于在指定字段上查找具有指定范围的项。语法如下:

```arduino

{!nge_queryfilter_typefield_namerange:value}范围查询不能用于全文检索查询,必须用在索引映射定义的字段上.否则可能出错!对于是否应用字段名.如{"filter":{"range":{"user_id":{"gte":10,"lt":30}}}}这会正确应用,但不能应用于“content”字段,而必须使用“_id”这样的形式.这可能导致结果不准确.因为这可能会对大小写和标点符号进行错误匹配.如{"filter":{"range":{"_id":{"gte":10,"lt":30}}}}这会返回包含任何具有user_id在10到30之间的所有内容.但实际的结果可能不是这样.如果需要匹配包含某个词的内容,应使用match或者match_phrase查询.对于包含标点符号或者大小写敏感的字段,应使用match或者match_phrase查询,并使用全词匹配或者短语匹配,以避免这些问题.否则,应使用filter或者query来过滤或者搜索结果,以避免这些问题.否则,应使用filter或者query来过滤或者搜索结果,并使用range或者terms过滤器来处理大小写和标点符号问题.否则,应使用bool或者bool_prefix_filter来处理大小写和标点符号问题.例如:{"filter":{"range":{"content":{"gte":"yourtexthere","lte":"yourtexthere"}}}}这将返回所有包含"yourtexthere"这个字符串的内容,但是可能并不是你想要的返回结果,因为"yourtexthere"可能在你的文档中的位置并不是最重要的内容.正确的应用是,你应该把所有相关的字段都用这些过滤器处理过.这样就不会返回任何不符合条件的文档了

第 2 页 共 2 页


本文标签: 查询 搜索 用于