没有用到elasticsearch的全文搜索特性,反而它的分词给我带来很多困扰。比如一个字段是
Wang Dai
我想用正则表达式去匹配,却只能使用单个词的匹配比如W.*g
或者D.*i
而不能使用整个句子的匹配W.*i
这个问题可以参考http://elasticsearch-users.115913.n3.nabble.com/Disabling-default-analyzer-td2932819.html
以下是我自己的记录
mapping中增加not_analyzed参数
PUT /<index_name>/_mapping
{
<type_name>: {
properties: {
<column_name>: {type: string, index: not_analyzed}
}
}
}
改变analyzer的type为keyword
PUT /<index_name>
{
analysis: {
analyzer: {
default: {
type: keyword
}
}
}
}
或在elasticsearch.yml
中加上
index:
analysis:
analyzer:
default:
type: keword
但这种方法略坑,因为它还是能按词搜,不过按句子搜也是可以了
dynamic_mapping
这种没用过,跟加not_analyzed
是一样的,不过是把加这个参数设置成默认行为