了解ELK分析器

时间:2017-04-23 12:46:29

标签: elasticsearch logstash elastic-stack

我刚刚接受ELK 5.1.1堆栈,我只有一些问题仅供我理解。 我已经使用标准分析仪/过滤器设置了这个堆栈,一切都很好。 我的数据源是我使用Logstash索引的MySQL后端。 我想处理包含重音的查询,希望>>> from numpy import sum >>> sum(range(100)) 4950 令牌过滤器可以帮助实现此目的。

首先,我学会了如何创建自定义分析器并另存为模板。 现在,当我查询此网址asciifolding时,我有2个模板:名为http://localhost:9200/_template?pretty的logstash默认模板和我的自定义模板,其设置为:

logstash

搜索关键字"custom_template" : { "order" : 1, "template" : "doo*", "settings" : { "index" : { "analysis" : { "analyzer" : { "myCustomAnalyzer" : { "filter" : [ "standard", "lowercase", "asciifolding" ], "tokenizer" : "standard" } } }, "refresh_interval" : "5s" } }, "mappings" : { }, "aliases" : { } } 会返回70次点击,但是当我搜索Yaoundé时,我一直没有点击。 以下是我对第二种情况的查询

Yaounde

有人可以帮我猜猜这里有什么问题吗? 还知道在索引过程中我的数据是由Logstash分析的,我是否真的必须指定在研究过程中应该根据第二个查询应用分析器{ "query": { "query_string": { "query": "yaounde", "fields": [ "title" ] } }, "from": 0, "size": 10 }

myCustomAnalyzer

以下是我的logstash配置文件

的输出部分示例
{
     "query": {
    "query_string": {
        "query": "yaounde",
        "fields": [
            "title"
        ],
        "analyzer": "myCustomAnalyzer"
    }
},
"from": 0,
"size": 10
}

谢谢

2 个答案:

答案 0 :(得分:1)

一个好的起点是使用elasticsearch的索引模板文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html

您的方案可以用于标题字段的示例:

"custom_template" : {
    "order" : 1,
    "template" : "doo*",
    "settings" : {
        "index" : {
            "analysis" : {
                "analyzer" : {
                    "myCustomAnalyzer" : {
                        "filter" : [
                            "standard",
                            "lowercase",
                            "asciifolding"
                        ],
                        "tokenizer" : "standard"
                   }
               }
         },
        "refresh_interval" : "5s"
     }
    },
    "mappings" : {
      "your_type": {
        "properties": {
          "title": {
            "type": "text",
            "analyzer": "myCustomAnalyzer"
          }
        }
      }
    },
    "aliases" : { }
}

另一种方法是更改​​动态映射。你可以在这里找到一个很好的例子来表示字符串。 https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-templates.html#match-mapping-type

答案 1 :(得分:0)

您能显示文档的映射吗?

(GET / my_index / my_doc / _mapping)

您在查询中作为参数提供的分析器仅适用于搜索时间,而不适用于索引时。因此,如果您没有在映射中设置此分析器,则字符串仍然使用“默认”分析器编制索引,因此它与您的结果不匹配。

您在搜索时提供的分析器将应用于您的查询字符串,但随后它将查看索引数据,索引数据被索引为“Yaoundé”,而不是“yaounde”。