我有文件,其中value是原始字符串: {"内容" :" field1 = 1,field2 = foo"}
我的意图是,通过field1,field2值查询。
我能想到的最近的事情是使用自定义分析器,它将基于逗号分隔符创建令牌,然后我可以搜索匹配的精确值,如" field1 = 1"或" field2 = foo" 。但是,理想情况下,我喜欢搜索field1的范围值,field2等的模式匹配。
有没有办法实现这个目标?我找不到任何方法来存储我可以用这种方式查询的分析结果。
答案 0 :(得分:0)
你是如何摄取文件的?如果您通过logstash进行操作,则可以使用过滤器处理器在那里应用转换
答案 1 :(得分:0)
我对你的问题有点困难。但是,我想你问是否有办法让Field1数字的类型和Field2的类型可搜索?
希望您正在运行Kibana,以便您可以使用Dev控制台对其进行测试。如果您只是让Elastic导入数据,它将为field1和field2创建可聚合和可搜索的字段,因为它们都设置为字符串值:
PUT /content_default/type/1 {"field1":"1" , "field2":"foo"}
如果您改为忽略1周围的引号,Elastic将创建该字段为long(假设您尚未导入同一字段中包含字符串的文档) - 这允许您按范围搜索。在这里我创建一个新的field3并将值设置为1,如果你查询你应该看到它很长
PUT /content_default/type/2 {"field1":"1" , "field2":"foo", "field3":1}
您可以预先加载模板,以便在加载任何数据之前预先定义类型 - 这样Elastic不必猜测您的字段应该是什么类型。使用字符串,您还可以定义是否希望它们只是关键字,可搜索或两者兼而有之。
这样的事情可以帮到你:
PUT _template\with_template
{
"template":"content_with_template",
"mappings":{
"content_with_template":{
"properties":{
"field2":{
"analyzer":"simple",
"type":"text"
},
"field1":{
"type":"keyword"
},
"field3":{
"type":"long"
}
}
}
}
}
然后将文档放入新的'content_with_template'索引中,此时无论field3是否在引号中都没关系 - 只要它解析为一个数字就会保存
PUT /content_with_template/type/1
{ "field1":"a1d" , "field2":"foo", "field3":1}
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html