我有一个es文档,如下所示。
{
"_index" : "trigger",
"_type" : "_doc",
"_id" : "urn:trigger:(urn:analyticsplatform:uc4):acxiom_au_attr.done",
"_version" : 45,
"_seq_no" : 420508,
"_primary_term" : 20,
"found" : true,
"_source" : {
"_boostScoreFactor" : 1.0,
"type" : "trigger",
"title" : "acxiom_au_attr.done",
}
}
这是标题字段的映射。
"title" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
它使用一个分析器来分隔标题,并且它会被分成多个术语
{
"tokens" : [
{
"token" : "acxiom",
"start_offset" : 0,
"end_offset" : 6,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "au",
"start_offset" : 7,
"end_offset" : 9,
"type" : "<ALPHANUM>",
"position" : 1
},
{
"token" : "attr",
"start_offset" : 10,
"end_offset" : 14,
"type" : "<ALPHANUM>",
"position" : 2
}
{
"token" : "done",
"start_offset" : 19,
"end_offset" : 23,
"type" : "<ALPHANUM>",
"position" : 4
}
]
}
但是我无法使用这个词来搜索它。
GET trigger/_search
{
"query": {
"match": {
"title": "acxiom"
}
}
}
如果我使用整个标题,它就可以工作。
GET trigger/_search
{
"query": {
"match": {
"title": "acxiom_au_attr.done"
}
}
}
我该怎么做才能使其支持按词搜索?
正如我可以检查映射一样,没有指定分析器。因此默认情况下 Elasticsearch 使用标准分析器。
这意味着,如果我使用默认设置插入数据(使用标准分析器),它将创建以下术语:
GET /_analyze?pretty
{
"analyzer" : "standard",
"text" : "acxiom_au_attr.done"
}
回应
{
"tokens": [
{
"token": "acxiom_au_attr.done",
"start_offset": 0,
"end_offset": 19,
"type": "<ALPHANUM>",
"position": 0
}
]
}
它只创建了一个术语,那就是
acxiom_au_attr.done
。这就是为什么它与整个值匹配但不与部分值匹配。
您可以使用简单分析器,它将创建如下所示的术语:
GET /_analyze?pretty
{
"analyzer" : "simple",
"text" : "acxiom_au_attr.done"
}
回复
{
"tokens": [
{
"token": "acxiom",
"start_offset": 0,
"end_offset": 6,
"type": "word",
"position": 0
},
{
"token": "au",
"start_offset": 7,
"end_offset": 9,
"type": "word",
"position": 1
},
{
"token": "attr",
"start_offset": 10,
"end_offset": 14,
"type": "word",
"position": 2
},
{
"token": "done",
"start_offset": 15,
"end_offset": 19,
"type": "word",
"position": 3
}
]
}
创建映射
PUT /test-index2?pretty
{
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "simple"
}
}
}
}
插入文档
POST test-index2/_doc
{
"title":"acxiom_au_attr.done"
}
使用术语搜索
GET test-index2/_search
{
"query": {
"match": {
"title": "acxiom"
}
}
}