身安不如心安,屋宽不如心宽 。

如何将多个token 合并成一个 token

Elasticsearch | 作者 zx3271234 | 发布于2018年08月06日 | 阅读数:3079

请问  如何将字符串 "bags and shoes" 分析成 "bag and shoe" 
 
例如: 
  1. 有字符串"bags and shoes", 应用Standard Tokenizer,得到分词结果 "bags"  "and"  "shoes"  (3个token) 
  2. "bags"  "and"  "shoes" 应用 Porter Stem Token Filter,
     得到分词结果:"bag"  "and"  "shoe"  (3个token) 
  3. 有没有合适的token filter 类型,能够将 "bag"  "and"  "shoe" 合并成单个token: "bag and shoe" ? 
     或者其他的方法,将"bags and shoes" 分析为  "bag and shoe"  (keyword类型,或者单个token的text类型)
已邀请:

medcl - 今晚打老虎。

赞同来自: code4j zx3271234

用 phrase 查询不就好了,为什么一定要拼在一起呢?
 
如果只是上面的命题,也有办法,假设固定是 3 个 token,用 shingle filter:
 
DELETE index

PUT index
{
"settings": {
"analysis": {
"analyzer": {
"myanalyzer": {
"type": "custom",
"tokenizer": "letter",
"filter": [
"stemmer",
"myfilter"
]
}
},
"filter": {
"myfilter": {
"type": "shingle",
"min_shingle_size": 3,
"max_shingle_size": 10,
"output_unigrams": false
}
}
}
}
}

GET index/_analyze
{
"text": ["bags and shoes"],
"analyzer": "myanalyzer"
}

结果
{
"tokens": [
{
"token": "bag and shoe",
"start_offset": 0,
"end_offset": 14,
"type": "shingle",
"position": 0
}
]
}

要回复问题请先登录注册