我刚刚接受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
}
谢谢
答案 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”。