elasticsearch,Indexing,Lucene,elasticsearch" /> elasticsearch,Indexing,Lucene,elasticsearch" />

Indexing 如何为ElasticSearch设置字段映射,以允许精确搜索和全文搜索?

Indexing 如何为ElasticSearch设置字段映射,以允许精确搜索和全文搜索?,indexing,lucene,elasticsearch,Indexing,Lucene,elasticsearch,我的问题是: 我有一个名为product\u id的字段,其格式类似于: A+B-12321412 如果我使用标准文本分析器,它会将其拆分为如下标记: /_analyze/?analyzer=standard&pretty=true" -d ' A+B-1232412 ' { "tokens" : [ { "token" : "a", "start_offset" : 1, "e

我的问题是:

我有一个名为
product\u id
的字段,其格式类似于:

A+B-12321412
如果我使用标准文本分析器,它会将其拆分为如下标记:

/_analyze/?analyzer=standard&pretty=true" -d '                                        
A+B-1232412
'
{
  "tokens" : [ {
    "token" : "a",
    "start_offset" : 1,
    "end_offset" : 2,
    "type" : "<ALPHANUM>",
    "position" : 1
  }, {
    "token" : "b",
    "start_offset" : 3,
    "end_offset" : 4,
    "type" : "<ALPHANUM>",
    "position" : 2
  }, {
    "token" : "1232412",
    "start_offset" : 5,
    "end_offset" : 12,
    "type" : "<NUM>",
    "position" : 3
  } ]
}
/\u analyze/?analyzer=standard&pretty=true“-d”
A+B-1232412
'
{
“代币”:[{
“令牌”:“a”,
“起始偏移量”:1,
“端部偏移”:2,
“类型”:“,
“职位”:1
}, {
“令牌”:“b”,
“起始偏移量”:3,
“端部偏移”:4,
“类型”:“,
“职位”:2
}, {
“令牌”:“1232412”,
“起始偏移量”:5,
“端部偏移”:12,
“类型”:“,
“职位”:3
} ]
}
理想情况下,我希望有时搜索准确的产品id,有时使用子字符串,或者只查询部分产品id

我对映射和分析器的理解是,每个字段只能指定一个分析器


是否有方法将字段存储为已分析和精确匹配?

是的,您可以使用fields参数。在您的情况下:

"product_id": {
    "type": "string",
    "fields": {
        "raw":   { "type": "string", "index": "not_analyzed" }
    }
}

这允许您使用两种不同的定义对同一数据进行两次索引。在这种情况下,它将通过默认分析器进行索引,而不进行分析,这将只拾取精确的匹配项。这对于排序返回结果也很有用:

但是,您需要花一些时间考虑如何搜索。特别是,对于混合了字母、数字和标点符号或特殊字符的零件号,您可能需要创造性地调整查询和匹配