我使用Elastic并使用以下设置:
ES = {
"mappings": {
ES_DOC_TYPE: {
"properties": {
"message": {
"type": "string",
"analyzer": "liza_analyzer",
"include_in_all": False
}
}
}
},
"settings": {
"number_of_shards": 4,
"analysis": {
"tokenizer": {
"liza_tokenizer": {
"type": "pattern",
"pattern": r"(\. )|[\s,\[\]\(\)\"\!\'\?\`\*\;\:\/<>«»\#]+",
"flags": "UNICODE_CASE"
}
},
"analyzer": {
"liza_analyzer": {
"type": "custom",
"tokenizer": "liza_tokenizer",
"filter": ["lowercase"]
}
},
}
}
}
当我试图找到一个词时,你好&#39;在一个句子&#39; hello world&#39;中,Elastic找到它。
当我试图找到一个词时,你好&#39;在一个句子&#39;你好。世界&#39;,Elastic找到它。
当我试图找到一个词时,你好&#39;在一句“你好”中,Elastic也发现了它。
但是当我试图找到“你好”这个词的时候。在一句话中,你好。&#39; (最后用点),Elastic找不到它。
同时,最后两句话的标记看起来像
{
"tokens": [{
"token": "hello",
"start_offset": 0,
"end_offset": 5,
"type": "<ALPHANUM>",
"position": 0
}]
}
(它们是相同的)
问题是:为什么会发生?我该如何解决?
答案 0 :(得分:0)
你的模式错了。它应该是:
"pattern": "(\.\s*)|[\s,\[\]\(\)\"\!\'\?\`\*\;\:\/<>«»\#]+"