2016 - 2024

感恩一路有你

基于词项term的搜索和基于全文的搜索

浏览量:4414 时间:2024-01-16 11:04:59 作者:采采

ElasticSearch提供了多种搜索方式,包括基于词项term的搜索和基于全文的搜索。在基于全文的搜索中,查询串会被分词,并将分词后得到的每个词项在索引中进行搜索。而基于词项term的搜索则不对查询串进行分词,直接进行查询。

创建索引和添加数据

首先,我们需要创建一个名称为books的索引,并批量加入测试文档数据。下面是创建索引和添加数据的命令示例:

```

// 删除索引

DELETE books

// 创建索引并批量添加数据

POST /books/_bulk

{ "index": { "_id":1} }

{ "productId" : "Deep Learn Linux", "desc" : "Linux" }

{ "index": { "_id":2} }

{ "productId" : "Java Thought", "desc" : "Java" }

{ "index": { "_id":3} }

{ "productId" : "Netty Actions", "desc" : "Netty" }

```

基于词项查询--单个词项匹配查询

基于词项查询的语法结构为:

```

GET /索引名称/_search

{

"query": {

"term": {

"字段名称": {

"value": "字段值"

}

}

}

}

```

如果我们根据字段desc和值"Linux"进行查询,会发现没有获取到任何结果。这是因为在加入索引时,默认会进行分词处理,并将分词后的所有词项转化为小写。因此,通过"Linux"无法查询到文档数据。如果我们使用"linux"进行查询,就可以得到相应的文档数据。

基于词项查询--多个词项的字符串匹配查询

由于基于词项term的查询不对查询串进行分词处理,因此如果查询串中包含多个词项,无论如何查询都不可能匹配到任何文档数据。为了解决这个问题,可以记住多字段属性来查询。例如,text类型属性默认有一个keyword字段,我们可以使用该字段进行查询。

基于词项查询--跳过算分查询

基于词项的查询通常用于精确匹配,因此算分数值并不关键。为了提高查询效率,我们可以使用constant score将算分过程去掉。特别是对于大数据量查询,这种方式可以显著提高查询效率。

以上就是基于词项term的搜索和基于全文的搜索的相关知识。通过合理运用不同的搜索方式,可以更加灵活地满足各种搜索需求。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。