标签: elasticsearch-dsl-py

无法通过Python访问ElasticSearch AWS

我正试图通过Python从我的localhost访问ElasticSearch AWS(我可以通过我的浏览器访问它).

from elasticsearch import Elasticsearch
ELASTIC_SEARCH_ENDPOINT = 'https://xxx'
es = Elasticsearch([ELASTIC_SEARCH_ENDPOINT])
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

ImproperlyConfigured('Root certificates are missing for certificate validation. Either pass them in using the ca_certs parameter or install certifi to use it automatically.',)
Run Code Online (Sandbox Code Playgroud)

我该如何访问它?我没有配置任何证书,我只解放了可以访问ElasticSearch Service的IP.

python amazon-web-services elasticsearch elasticsearch-dsl-py

7
推荐指数
3
解决办法
4229
查看次数

使用elasticsearch-dsl-py索引和渗透文档

我正在制作和调查检索信息研讨会.我有一个json带有文章列表的文件,我需要对它们进行索引,并在使用带有突出显示的过滤器之后.

在终端中执行此操作的步骤列表如下:
1.创建具有渗透的地图.

curl -XPUT 'localhost:9200/my-index?pretty' -H 'Content-Type: application/json' -d'
{
    "mappings": {
        "_doc": {
            "properties": {
                "title": {
                    "type": "text"
                },
                "query": {
                    "type": "percolator"
                }
            }
        }
    }
}
'
Run Code Online (Sandbox Code Playgroud)
  1. 索引新文章:

    curl -XPUT 'localhost:9200/my-index/_doc/1?refresh&pretty' -H 'Content-Type: application/json' -d'
    {           
        "CourseId":35,
          "UnitId":12390,
          "id":"16069",
          "CourseName":"ARK102U_ARKEOLOJ?K ALAN YÖNET?M?",
          "FieldId":8,
          "field":"TAR?H",
        "query": {
            "span_near" : {
                "clauses" : [
                    { "span_term" : { "title" : "dünya" } },
                    { "span_term" : { "title" : "miras?" } },
                    { "span_term" : …
    Run Code Online (Sandbox Code Playgroud)

python elasticsearch elasticsearch-dsl elasticsearch-dsl-py

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

证书验证缺少根证书。要么使用 ca_certs 参数传递它们,要么安装 certifi 以自动使用它

django-elasticsearch-dsl在我们的一个项目中使用,在 AWS Elasticsearch 中创建集群后,我开始看到以下错误:Root certificates are missing for certificate validation. Either pass them in using the ca_certs parameter or install certifi to use it automatically.. 提出了一些解决方案来解决https://elasticsearch-py.readthedocs.io此链接 [link][1] 中的问题,但这不是django-elasticsearch-dsl使用elasticsearch-py. 我只能通过settings.py这样设置端点:

ELASTICSEARCH_DSL = {
    'default': {
        'hosts': 'https://my-aws-elasticsearch-endpoint.eu-central-1.es.amazonaws.com'
    }
}
Run Code Online (Sandbox Code Playgroud)

如何添加/启用此证书 django-elasticsearch-dsl

django amazon-web-services elasticsearch elasticsearch-dsl elasticsearch-dsl-py

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

Elasticsearch 在多个索引上打分:dfs_query_then_fetch 返回与 query_then_fetch 相同的分数

我在 Elasticsearch 中有多个索引(以及使用 django-elasticsearch-dsl 创建的 Django 中的相应文档)。所有索引都具有以下设置:

    settings = {'number_of_shards': 1,
                'number_of_replicas': 0}
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试对所有 10 个索引执行搜索。为了检索来自不同索引的结果之间的一致评分,我使用dfs_query_then_fetch

search = Search(index=['mov*'])
search = search.params(search_type='dfs_query_then_fetch')
objects = search.query("multi_match", query='Tom & Jerry', fields=['title', 'actors'])
Run Code Online (Sandbox Code Playgroud)

由于得分不一致,我得到了糟糕的结果。一个索引中名为“杰瑞和他的朋友汤姆故事”的书的排名可能高于另一个索引中的卡通片“汤姆和杰瑞”。原因是dfs_query_then_fetch不起作用。当我删除它或用简单的query_then_fetch替换它时,我得到了完全相同的结果和相同的评分。

我也在 URI 请求上对其进行了测试,对于两种搜索类型,我总是得到相同的分数。

原因是什么?

更新:结果实际上并不相同,但它们确实略有不同,例如,使用 dfs 的分数为 50.1,不使用 dfs 的分数为 50.0,而一个索引中的相同模型的分数为 80.0。

django elasticsearch elasticsearch-dsl elasticsearch-dsl-py

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

RequestError(400,u'action_request_validation_exception',u'验证失败:1:类型丢失;

我正在关注https://github.com/sabricot/django-elasticsearch-dsl来索引我的 django-model 中的数据。我已将 document.py 文件定义为:->

from django_elasticsearch_dsl import Document , fields 
from django_elasticsearch_dsl.registries import registry
from abc.models import *
from elasticsearch_dsl import connections, field, analyzer


connections.create_connection(hosts=['localhost'], timeout=20)


@registry.register_document
class ParkingDocument(Document):
   class Index:
    # Name of the Elasticsearch index
    name = 'parking'
    # See Elasticsearch Indices API reference for available settings
    settings = {'number_of_shards': 1,
                'number_of_replicas': 0}

   class Django:
    model = ParkingLocation

    fields = [
        'created',
        'updated',
    ]
Run Code Online (Sandbox Code Playgroud)

当我运行命令时 python manage.py search_index --rebuild。我收到标题中提到的错误。任何帮助,将不胜感激。

django elasticsearch elasticsearch-dsl-py

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

如何聚合,直到在ElasticSearch中达到某个值?

我想通过“数量”字段汇总一个文档列表(每个文档都有两个字段-时间戳记和数量),直到达到某个值为止。例如,我想获得按时间戳排序的文档列表,该文档的总数等于100。可以在一个查询中进行操作吗?

这是我的查询,返回总金额-我想在此处添加一个条件,以在达到一定值时停止聚合。

{
"query": {
    "bool": {
        "filter": [
            {
                "range": {
                    "timestamp": {
                        "gte": 1525168583
                    }
                }
            }
        ]
    }
},
"aggs": {
    "total_amount": {
        "sum": {
            "field": "amount"
        }
    }
},
"sort": [
    "timestamp"
],
"size": 10000
}
Run Code Online (Sandbox Code Playgroud)

谢谢

elasticsearch elasticsearch-aggregation elasticsearch-dsl-py

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

通过整数字段在Elasticsearch_dsl中进行范围查询

我用过elasticsearch-dsl==5.2.0elasticsearch==5.3.0Django==1.8.15

Django模型

class Item(models.Model):
    price = models.DecimalField(default=0)

    def to_search(self):
        return DocItem(
            meta={'id': self.id},
            price=self.price
        )
Run Code Online (Sandbox Code Playgroud)

DocType类

class DocItem(DocType):
    price = Integer()
Run Code Online (Sandbox Code Playgroud)

FacetedSearch类

class ItemSearch(FacetedSearch):
    index = 'item'
    doc_types = [DocItem, ]
    fields = ['price']
Run Code Online (Sandbox Code Playgroud)

当我需要使用搜索所有项目时price == 5.0,执行下一个操作:

search = ItemSearch().search()
result = search.filter('match', price=5.0).execute()
Run Code Online (Sandbox Code Playgroud)

问题

如何搜索价格范围为1.0 <价格<= 5.0的所有项目?

django elasticsearch elasticsearch-dsl-py

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

elasticsearch dsl 扫描结果

有人可以指出我_source在 elasticsearch dsl python 客户端中使用扫描 API 时如何从生成器中提取结果吗?

例如,我正在使用(从这个例子中,elasticsearch-dsl scan

for hit in s.scan():
    print(hit)
Run Code Online (Sandbox Code Playgroud)

我得到以下

<Hit(beacon/INDEX/_Mwt9mABoXXeYV0uwSC-): {'client_number': '3570', 'cl...}>
Run Code Online (Sandbox Code Playgroud)

如何从命中生成器中提取字典?

python python-3.x elasticsearch-dsl elasticsearch-dsl-py

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

使用“django-elasticsearch-dsl”将 ElasticSearch 连接到 Django 会在尝试创建/重建索引时导致 ConnectionError

我正在尝试调用在 docker 上运行的本地 ES 实例。我使用以下说明来设置我的 ES 实例: https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html https://www.elastic.co/guide/en/ elasticsearch/reference/current/docker.html#docker-cli-run-dev-mode

我可以在 Kibana 上使用我的实例http://0.0.0.0:5601/app/dev_tools#/console。到这里一切正常。

现在我正在尝试使用 django 模型定义一些示例文档并通过库对它们进行索引;我按照此处的说明进行操作:https://django-elasticsearch-dsl.readthedocs.io/en/latest/quickstart.html#install-and-configure

首先,我添加 pip 安装并添加django_elasticsearch_dslINSTALLED_APPS

接下来,我在settings.py中添加:

ELASTICSEARCH_DSL = {
    'default': {
        'hosts': 'localhost:9200'
    },
}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个示例模型和文档,如下所示:

# models.py

from django.db import models

class Car(models.Model):
    name = models.CharField(max_length=30)
    color = models.CharField(max_length=30)
    description = models.TextField()
    type = models.IntegerField(choices=[
        (1, "Sedan"),
        (2, "Truck"),
        (4, "SUV"),
    ])
Run Code Online (Sandbox Code Playgroud)
# documents.py

from django_elasticsearch_dsl import Document
from django_elasticsearch_dsl.registries import registry
from .models import Car

@registry.register_document
class CarDocument(Document): …
Run Code Online (Sandbox Code Playgroud)

python django elasticsearch elasticsearch-dsl-py

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

Django Elastic Search:AttributeError:类型对象“PostDocument”没有属性“Django”

我在 django 的弹性搜索方面很新......当我运行这个命令时,python3 manage.py search_index --rebuild 它会触发我这个错误:我没有得到什么问题

File "/home/pyking/.local/lib/python3.6/site-packages/django_elasticsearch_dsl/registries.py", line 39, in register_document
    django_meta = getattr(document, 'Django')
AttributeError: type object 'PostDocument' has no attribute 'Django'
Run Code Online (Sandbox Code Playgroud)

这是我的 documents.py

from django_elasticsearch_dsl import DocType, Index
from blog2.models import Article

posts = Index('articles')

@posts.doc_type
class PostDocument(DocType):
    class Meta:
        model = Article

        fields = [
            'alias',
            'author',
            'title',
            'body',
            'category',
        ]
Run Code Online (Sandbox Code Playgroud)

这是我的模型:

class Article(models.Model):
    alias = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='author')
    title = models.CharField(max_length=200)
    body = models.TextField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE) …
Run Code Online (Sandbox Code Playgroud)

django elasticsearch django-rest-framework elasticsearch-dsl elasticsearch-dsl-py

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