首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >索引设置中的Elasticsearch分析器没有影响

索引设置中的Elasticsearch分析器没有影响
EN

Stack Overflow用户
提问于 2022-09-13 08:27:09
回答 1查看 14关注 0票数 0

我正在尝试将分析器设置为其设置中的索引。

代码语言:javascript
复制
// PUT /customers 
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "title": {
        "type": "text"
      }
    },
    "dynamic": false
  },
  "settings": {
    "analysis": {
      "analyzer": "ik_smart"
    }
  }
}

然后我索引了一些数据。

代码语言:javascript
复制
// POST /customers/_doc
{
  "name": "张三",
  "title": "工程师"
}

// POST /customers/_doc
{
  "name": "李四",
  "title": "测试员"
}

ik_smart分析仪进行分析

代码语言:javascript
复制
//GET /customers/_analyze
{
  "text": "李四工程师",
  "analyzer": "ik_smart"
}

// gets tokens ['李四', '工程师']

使用默认分析器

代码语言:javascript
复制
// GET /customers/_analyze
{
  "text": "李四工程师"
}

// gets tokens ['李', '四', '工', '程', '师']

最后搜索“李四工程师”

代码语言:javascript
复制
// GET /customers/_search
{
  "query": {
    "bool": {
      "must": {
        "multi_match": {
          "query": "李四工程师",
          "operator": "or",
          "type": "cross_fields",
          "fields": [
            "name^10",
            "title^7"
          ],
          "analyzer": "ik_smart"
        }
      }
    }
  }
}

// gets empty hits

如果我把ik_smart分析器放进每个字段

代码语言:javascript
复制
// PUT /customers 
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "analyzer": "ik_smart"
      },
      "title": {
        "type": "text",
         "analyzer": "ik_smart"
      }
    },
    "dynamic": false
  }
}

那么请求就能正常工作了。

我怀疑第一个设置没有将分析器应用到索引中的任何字段。

我在这里使用ik_smart插件,它提供了一个ik_smart分析器,因为中文没有分隔字符的空间,ik_smart是一个基于字典的分析器。如果没有ik_smart分析器,任何包含中文单词或句子的数据都将被索引为单个字符。因此,当我在搜索中使用默认分析器时,它也能工作,因为短语李四工程师分解为['李', '四', '工', '程', '师'],并与索引数据匹配。但这并不能提供一个非常准确的相关性。

如果我使用ik_smart分析器进行搜索,就会得到不匹配索引数据的令牌['李四', '工程师']

那么,为什么settings.analysis.analyzer不像预期的那样工作呢?

如果这个设置没有任何影响的话,它有什么用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-13 08:49:41

如果希望ik_smart成为索引的默认分析器,可以在分析器定义中使用default param设置它,如官方文档中所解释的那样。

代码语言:javascript
复制
PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": { --> Note this
          "type": "simple"
        }
      }
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73699801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档