弹性没有找到句子中的最后一个单词,最后是圆点

时间:2016-07-26 10:23:03

标签: python elasticsearch

我使用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
}]
}

(它们是相同的)

问题是:为什么会发生?我该如何解决?

1 个答案:

答案 0 :(得分:0)

你的模式错了。它应该是:

"pattern": "(\.\s*)|[\s,\[\]\(\)\"\!\'\?\`\*\;\:\/<>«»\#]+"