我在术语查询中要求弹性搜索中的嵌套字段,其中嵌套字段值应与术语查询中提供的值的数量完全匹配。例如,考虑下面的查询,在这里我们对名为类型的嵌套字段进行查询。
GET资产/_search
{
"size": "10",
"from": 0,
"query": {
"bool": {
"must": [
{
"nested": {
"path": "Types",
"query": {
"bool": {
"must": [
{
"term": {
"Types.Label.keyword":
["VOD, AOP"]
}
}
]
}
}
}
}
]
}
}
}
索引映射
{
"media-assets": {
"mappings": {
"dynamic": "true",
"properties": {
"Types": {
"type": "nested",
"properties": {
"Label": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256,
"normalizer": "lowercase_normalizer"
},
"ngram": {
"type": "text",
"analyzer": "ngram_tokenizer_analyzer"
}
}
}
}
}
}
}
}
}
样本文件:
{
"_source": {
"AssetId": 1657352,
"MaterialId": "XBV01001",
"AirDate": "1997-03-10T00:00:00Z",
"Types": [
{
"Type": "AOP"
},
{
"Type": "VOD"
}
]
}
}
上述查询应返回字段类型正好有2个值的文档,即“VOD”
尝试以下方法。
{
"size": "10",
"from": 0,
"query": {
"bool": {
"must": [
{
"nested": {
"path": "Types",
"query": {
"bool": {
"must": [
{
"term": {
"Types.Label.keyword":
["VOD, AOP"]
}
},
{
"script": {
"script": {
"inline": "doc['Types.Label'].length == 2,
"lang": "painless"
}
}
}
]
}
}
}
}
]
}
}
}
注意:脚本查询的性能很慢,如果可能的话,可以考虑在查询结果后过滤查询结果。
您需要使用下面搜索查询中定义的script\u score
,以及函数分数查询。
添加带有索引数据、映射、搜索查询和搜索结果的工作示例
索引映射:
{
"mappings": {
"properties": {
"Types": {
"type": "nested"
}
}
}
}
索引数据:
{
"Types": [
{
"Label": "VOD"
},
{
"Label": "AOP"
},
{
"Label": "ABC"
}
]
}
{
"Types": [
{
"Label": "VOD"
},
{
"Label": "AOP"
}
]
}
搜索查询:
{
"query": {
"function_score": {
"query": {
"bool": {
"must": [
{
"nested": {
"path": "Types",
"query": {
"bool": {
"must": [
{
"terms": {
"Types.Label.keyword": [
"VOD",
"AOP"
]
}
}
]
}
}
}
}
]
}
},
"functions": [
{
"script_score": {
"script": {
"source": "params._source.containsKey('Types') && params._source['Types'] != null && params._source.Types.size() == 2 ? 1 : 0"
}
}
}
],
"min_score": 1
}
}
}
搜索结果:
"hits": [
{
"_index": "67639937",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"Types": [
{
"Label": "VOD"
},
{
"Label": "AOP"
}
]
}
}
]
我有以下格式的弹性搜索文档 } } 我的要求是,当我搜索特定字符串(string.string)时,我只想获得该字符串的FileOffSet(string.FileOffSet)。我该怎么做? 谢谢
我正在LDAP服务器上工作。它有弹性搜索。我必须用一些Javascript代码(JSON格式)发送查询。 这是我的查询: 我试图打印所有结果,其中“server”=“server\u name”(该字段是server:server\u name…)。我认为关于弹性搜索的文档太小了。我找到了一些文档,但都是一样的,对新用户没有帮助。这个例子太简单了。 此查询返回所有结果,包括任何筛选器。 Ps:这就
我刚加入弹性搜索公司。而不知道如何在JSON请求中对索引和an类型发出正确的请求?(所以我不想像localhost:9200/myindex/mytype/_search那样在URL中使用索引和类型,而是向localhost:9200/_search发出JSON请求) 我试过这样的东西。但我得到的结果是'AAA'索引而不是'BBB'索引。如何只从bbb索引得到结果或者根本没有结果?
如何获得空数组和美国的结果和
关于如何打开缓存有什么建议吗?
我使用Elasticsearch允许用户输入要搜索的术语。例如,我要搜索以下属性'name': 如果使用以下代码搜索或,我希望返回此文档。 我尝试过做一个bool must和做多个术语,但它似乎只有在整个字符串都匹配的情况下才起作用。 所以我真正想做的是,这个词是否以任何顺序包含两个词。 有人能帮我走上正轨吗?我已经在这上面砸了一段时间了。