我希望能够使用ngram分析器搜索可包含撇号的内容:
我创建了一个索引并将我的内容映射到我定义的分析器:
async function createIndex() {
var settings = {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer",
"filter": [
"lowercase"
]
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 2,
"max_gram": 10,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
return await client.indices.create({
index: 'books',
body: {
settings: settings
}
});
}
然而,当我搜索“arc'hant”之类的东西时,它会在现实中搜索“arc”和“hant”而不是一个单词,因此它返回我不想返回的匹配。
这是我的搜索请求:
router.get('/autocomplete', function(req, res, next) {
var content = req.query.term;
content = content.toLowerCase();
client.search({
index: 'books',
type: 'books',
body:{
"query": {
"query_string" : {
"fields" : [
"name^5",
"content"
],
"query" : content,
"default_operator" : "AND"
}
}
}
}).then(function (resp) {
res.send(resp);
}, function (err) {
res.send(formatError(err));
});
});
处理这个问题的方法是什么?
答案 0 :(得分:0)
在token_chars
中添加“标点符号”使其正常工作!