标签: elasticsearch-dsl

查询vs过滤器以及查询或过滤器中正确表达的用法

我在SO中看到了很多问题,还阅读了有关“未缓存查询时缓存了过滤器”的文档,以及“对所有值应用查询”和“如果查询对象之外在查询后应用了过滤器”等信息, 。

底线是文档很烂,DSL很难掌握。我正在尝试优化一些查询并使用kibana dev工具搜索分析器,但是我的本地数据集必须太小,无法测量实际的性能差异(我正在双向获得结果),并且没有测试具有多个节点的集群,以处理真实的大型数据集。

在这种情况下,所有查询将返回相同的结果。我想了解两者之间的区别,以及在任何允许将子句放置在过滤器中的情况下,为什么您更喜欢查询而不是过滤器

GET foo11/_search
{
  "query": {
    "bool": {
      "filter": {
        "match" : {
          "in_stock" : true
        }
      }
    }
  }
}

GET foo11/_search
{
  "query": {
    "bool": {
      "filter": {
        "term" : {
          "in_stock" : true
        }
      }
    }
  }
}


GET foo11/_search
{
  "query": {
    "bool": {
      "must": {
        "match" : {
          "in_stock" : true
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这3种情况在表现上有什么区别?我真的可以证明一个比另一个更好/更差吗?

之间有什么区别?

"match" : {
  "in_stock" : true
}
Run Code Online (Sandbox Code Playgroud)

"term" : {
  "in_stock" : …
Run Code Online (Sandbox Code Playgroud)

lucene elasticsearch elasticsearch-dsl

2
推荐指数
1
解决办法
478
查看次数

如何在elasticsearch-dsl python中启用track_scores

我正在使用elasticsearch dsl搜索elasticsearch:https : //elasticsearch-dsl.readthedocs.org/en/latest/

如何为查询启用track_scores?

我知道它在Elasticsearch中受支持:https//www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html#_track_scores

只是不知道如何在Elasticsearch-dsl中做同样的事情

python elasticsearch elasticsearch-dsl

1
推荐指数
1
解决办法
680
查看次数

elasticsearch 中 field_value_factor 的多个输入

我正在尝试使用 field_value_factor 来衡量文档中的某些字段来制定弹性搜索查询。

{
  "query": {
    "match": {
      "local": true
    },
    "function_score": {
      "functions": [
        {
          "field_value_factor": {
            "field": "title",
            "factor": 1.2,
            "missing": 1
          }
        },
        {
          "gauss": {
            "location": {
              "origin": {
                "lat": 51.5,
                "lon": 0.12
              },
              "offset": "2 Miles",
              "scale": "3 Miles"
            }
          }
        },
        {
          "gauss": {
            "creation_time": {
              "decay": 0.8,
              "offset": "2d",
              "scale": "48d"
            }
          },
          "weight": 2
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

任何输入,如:

"field_value_factor": {
                             "field": [“title”,"description"],
                             "factor": [1.2,0.8],
                             "missing": [1,0]
                            }
Run Code Online (Sandbox Code Playgroud)

不适用于这两个字段,并且查询检索与第一个相同的文档。

是否可以在“field_value_vector”中输入多个术语?

elasticsearch elasticsearch-dsl

1
推荐指数
1
解决办法
1775
查看次数

How do you use the Elasticsearch Ingest Attachment Processor Plugin with the Python package elasticsearch-dsl

I'm having trouble trying to use the Ingest Attachment Processor Plugin with ElasticSearch (5.5 on AWS, 5.6 local). I'm developing in Python (3.6) and am using the elasticsearch-dls library.

I'm using Persistence and have my class set-up like this:

import base64
from elasticsearch_dsl.field import Attachment, Text
from elasticsearch_dsl import DocType, analyzer

lower_keyword = analyzer('keyword', tokenizer="keyword", filter=["lowercase"])

class ExampleIndex(DocType):
class Meta:
    index = 'example'
    doc_type = 'Example'

    id = Text()
    name = Text(analyzer=lower_keyword)
    my_file = Attachment()
Run Code Online (Sandbox Code Playgroud)

I then have a …

python python-3.x elasticsearch elasticsearch-plugin elasticsearch-dsl

1
推荐指数
1
解决办法
5534
查看次数

使用elasticsearch-dsl-py查询时间戳范围

我有一个 elasticsearch 范围查询,我想将其转换为elasticsearch-dsl

Elasticsearch Python API

{"range": 
    {"@timestamp": 
        {"gte": 1570258800000, 
         "lte": 1571036400000, 
         "format": "epoch_millis"
        }
     }
 }
Run Code Online (Sandbox Code Playgroud)

Elasticsearch-DSL-Py 查询?

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search

client = Elasticsearch(<connection_details>)

s = Search(using=client, index="my-index") \
    .query("???")
Run Code Online (Sandbox Code Playgroud)

python elasticsearch elasticsearch-dsl elasticsearch-dsl-py

1
推荐指数
1
解决办法
8242
查看次数

Python 上的 Elasticsearch DSL 无法生成分数

我有一个 Elasticsearch 数据库,其中包含多个字段,其中可以包含名称信息,并尝试像这样搜索它:

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search

client = Elasticsearch()
s = Search(using=client, index="names")
query = 'smith'
fields = ['name1', 'name2']

results = s.query("multi_match", query=query, fields=fields, fuzziness='AUTO')

for hit in results.scan():
    print(hit.meta.score)
Run Code Online (Sandbox Code Playgroud)

结果是:

None
None
None
...
Run Code Online (Sandbox Code Playgroud)

但是,如果我手动构建它:

results = client.search(index="names",
    body={"size": 100, "query":{
        "multi_match": {
            "query": query, "fields": fields, "fuzziness": 'AUTO'
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

我的结果是:

{'_index': 'names', '_type': 'Name1', '_id': '1MtYSW4BXryTHXwQ1xBS', '_score': 14.226202, '_source': {...}
{'_index': 'names', '_type': 'Name1', '_id': 'N8tZSW4BXryTHXwQHBfw', '_score': 14.226202, '_source': {...} …
Run Code Online (Sandbox Code Playgroud)

python elasticsearch elasticsearch-dsl elasticsearch-dsl-py

1
推荐指数
1
解决办法
1855
查看次数