问题描述
在Elasticsearch中,当我们没有设置mapping的情况下,插入一条记录字符串类型的被默认指定为text类型,text类型在Elasticsearch是会被分词的. 比如你插入一个名字为(wxx wxx)的记录,那么当你检索(name:wxx)的时候,这条记录是会被检索到的; 再比如你插入的记录地址为(address:江西抚州市),那么当你按照地址(address:江西抚州市)去检索,你会发现你查询不出这条记录,这是因为你的address字段默认分词检索的.这两种情况,一种查询多了,一种一条记录没检出,都是因为分词导致的.
案例说明
//插入测试数据1
POST index3/_doc
{
"name": "wxx wxx",
"address": "江西抚州",
"age": 28,
"hobbby": [
"工作"
],
"sex": "man"
}
//插入测试数据2
POST index3/_doc
{
"name": "wxx",
"address": "江西抚州",
"age": 28,
"hobbby": [
"工作"
],
"sex": "man"
}
//查询语句--检索name=wxx,发现两条都能被检索到
GET index3/_search
{
"query": {
"constant_score": {
"filter": {
"term": {
"name": "wxx"
}
}
}
}
}
//查询语句--检索address=江西抚州,发现一条都解决不了
GET index3/_search
{
"query": {
"constant_score": {
"filter": {
"term": {
"address": "江西抚州"
}
}
}
}
}
复制代码
疑惑解答
//分词分析语句
POST index3/_analyze
{
"field": "name",
"text": "wxx wxx"
}
POST index3/_analyze
{
"field": "address",
"text": "江西抚州"
}
复制代码
说明:通过分词,我们发现,默认情况下,只检索分词倒排索引关联的数据
//分词分析语句
POST index3/_analyze
{
"field": "name.keyword",
"text": "wxx wxx"
}
POST index3/_analyze
{
"field": "address.keyword",
"text": "江西抚州"
}
复制代码
说明:我们只要不以默认分词的倒排索引去检测,而是当作一个keyword(比较新版本支持)去关联对应数据即可
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END