如果我有文件:
1: { "name": "red yellow" }
2: { "name": "green yellow" }
我想用“红棕色黄”查询,得到文档1。
我怎么能这么做?反过来很容易...
首先,您必须将字段声明为FieldData:true
,以便在其上执行脚本:
PUT test
{
"mappings": {
"properties": {
"name": {
"type": "text",
"fielddata": true
}
}
}
}
然后,您可以在查询中使用脚本过滤结果:
POST test/_search
{
"query": {
"bool": {
"filter": {
"script": {
"script": {
"source": """
boolean res = true;
for (item in doc['name']) {
res = 'red brown yellow'.contains(item) && res;
}
return res;
""",
"lang": "painless"
}
}
},
"must": [
{
"match": {
"name": "red brown yellow"
}
}
]
}
}
}
请注意,文本字段上的fielddata可能花费很大,如果fou可以将该字段索引为数组上的关键字,则效果更好,如下所示:
1: { "name": ["red","yellow"] }
2: { "name": ["green", "yellow"] }
搜索请求可以完全相同
我在嵌套文档上合并term,must_not查询时遇到了困难。 Sense示例可以在这里找到:http://Sense.qbox.io/gist/be436a1ffa01e4630a964f48b2d5b3a1ef5fa176 下面是我的映射: 该索引中有两个文档: 你能给我一些解决这个问题的线索吗? 谢谢。
另外,类型中的所有文档都存储了上面提到的community的值。感谢帮助。
问题内容: 我有两种日志消息: 第一个消息是已发送消息的类型,第二个消息是确认消息已传递的消息。 它们之间的区别是后缀,我已将其与“ id”分开并可以对其进行查询。 这些消息将按以下格式解析并存储在elasticsearch中: 我想找出哪些消息已成功发送,哪些没有成功。我是Elasticsearch的初学者,所以我真的很努力。 我目前正在尝试术语聚合,但是我所能实现的就是以下代码: 向我显示已发
我试图获取缺少字段“topic.description”和匹配项“fundedunder.programme”:“abc”的文档。 映射: 我的查询如下所示:
问题内容: 我有以下 匹配 查询字符串: 我想它的意思是,但实际上它能执行。 然后我尝试了 术语 查询字符串: 它执行,显示 术语 查询通过数组支持多个OR条件。 我很好奇为什么 匹配 查询不支持通过数组的 OR 条件?并且它不显示任何语法错误。 问题答案: 该查询仅支持要指定的单个字符串值。官方文档中没有明确指定它,但是如果您愿意阅读的源代码,则可以看到,在解析字段时,解析器将跳过标记来分隔数组
问题内容: 在ElasticSearch中是否有可能形成可以保留术语顺序的查询? 一个简单的例子是使用标准分析器为这些文档建立索引: 你知道要搜索 你知道搜索 知道为您搜寻 我可以查询,这将返回所有文档,包括第三个文档。 如果我只想检索按此特定顺序排列有术语的文档怎么办?我可以构成一个查询吗? 考虑到仅通过引用文本即可获得短语:(检索第一和第二文档)在我看来,应该有一种方法可以保留不相邻的多个术语