我试图为一个文档编制索引,该文档有三个字段:first_name、last_name、占领类型“keyword”,并分别有值XYZ、ABC和DEF。
我已经使用过滤器编写了查询,以便与和条件完全匹配,如下所示,
"query": {
"bool": {
"filter": [
{"term": {"first_name": "XYZ"}},
{"term": {"last_name": "ABC"}}
]
}
}
这必须返回一个文档,但不返回任何内容。
我对同一个操作有另一个查询,
"query": {
"bool": {
"must": [
{"match": {"first_name": "XYZ"}},
{"match": {"last_name": "ABC"}}
]
}
}
这将返回一个文档。
根据Elasticsearch文档,我知道查询和筛选的区别在于筛选不会对结果打分。我不知道为什么第一个查询没有返回任何结果。我的理解正确吗?
正如文档所述,除了评分,查询和筛选之间没有区别。当然,这适用于查询和筛选器使用相同查询类型的情况。这里您使用两种不同的类型-术语
和匹配
<代码>术语用于精确比较,而匹配
用于分析并用作全文搜索。
看看下面的例子。
您的映射:
PUT /index_53053054
{
"mappings": {
"_doc": {
"properties": {
"first_name": {
"type": "text"
},
"last_name": {
"type": "text"
},
"occupation": {
"type": "keyword"
}
}
}
}
}
您的文件:
PUT index_53053054/_doc/1
{
"first_name": "XYZ",
"last_name": "ABC",
"occupation": "DEF"
}
过滤器
查询:
GET index_53053054/_search
{
"query": {
"bool": {
"filter": [
{
"match": {
"first_name": "XYZ"
}
},
{
"match": {
"last_name": "ABC"
}
},
{
"term": {
"occupation": "DEF"
}
}
]
}
}
}
和结果:
{
"took": 7,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0,
"hits": [
{
"_index": "index_53053054",
"_type": "_doc",
"_id": "1",
"_score": 0,
"_source": {
"first_name": "XYZ",
"last_name": "ABC",
"occupation": "DEF"
}
}
]
}
}
类似的必须
查询:
GET index_53053054/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"first_name": "XYZ"
}
},
{
"match": {
"last_name": "ABC"
}
},
{
"term": {
"occupation": "DEF"
}
}
]
}
}
}
答复:
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.8630463,
"hits": [
{
"_index": "index_53053054",
"_type": "_doc",
"_id": "1",
"_score": 0.8630463,
"_source": {
"first_name": "XYZ",
"last_name": "ABC",
"occupation": "DEF"
}
}
]
}
}
如您所见,点击次数几乎相同。唯一的区别是在过滤器中
不计算分数,而在必须
查询中则不计算分数。
阅读更多:https://www.elastic.co/guide/en/elasticsearch/reference/6.4/query-filter-context.html
我有以下格式的弹性搜索文档 } } 我的要求是,当我搜索特定字符串(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索引得到结果或者根本没有结果?
我在术语查询中要求弹性搜索中的嵌套字段,其中嵌套字段值应与术语查询中提供的值的数量完全匹配。例如,考虑下面的查询,在这里我们对名为类型的嵌套字段进行查询。 GET资产/_search 索引映射 样本文件: 上述查询应返回字段类型正好有2个值的文档,即“VOD”
如何获得空数组和美国的结果和
关于如何打开缓存有什么建议吗?