我正试图在分析器的设置中将其设置为索引。
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"title": {
"type": "text"
}
},
"dynamic": false
},
"settings": {
"analysis": {
"analyzer": "ik_smart"
}
}
}
然后我索引了一些数据。
{
"name": "å¼ ä¸",
"title": "å·¥ç¨å¸"
}
{
"name": "æå",
"title": "æµè¯å"
}
分析与
ik_smart
分析器
{
"text": "æåå·¥ç¨å¸",
"analyzer": "ik_smart"
}
使用默认分析器
{
"text": "æåå·¥ç¨å¸"
}
最后搜索“·¨”
{
"query": {
"bool": {
"must": {
"multi_match": {
"query": "æåå·¥ç¨å¸",
"operator": "or",
"type": "cross_fields",
"fields": [
"name^10",
"title^7"
],
"analyzer": "ik_smart"
}
}
}
}
}
如果我把
ik_smart
分析仪进入每个字段
{
"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
按预期工作?
如果此设置没有任何影响,那么它又有什么用呢?