小编dro*_*ode的帖子

elasticsearch-py扫描并滚动以返回所有文档

我使用elasticsearch-py连接到包含300多万个文档的ES数据库.我想返回所有文档,以便我可以抽象数据并将其写入csv.我能够使用以下代码轻松完成10个文档(默认返回).

es=Elasticsearch("glycerin")
query={"query" : {"match_all" : {}}}
response= es.search(index="_all", doc_type="patent", body=query)

for hit in response["hits"]["hits"]:
  print hit
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我尝试实现扫描和滚动时,我可以获得所有问题.我尝试了两种不同的方法但没有成功.

方法1:

scanResp= es.search(index="_all", doc_type="patent", body=query, search_type="scan", scroll="10m")  
scrollId= scanResp['_scroll_id']

response= es.scroll(scroll_id=scrollId, scroll= "10m")
print response
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 之后scroll/它给出滚动id然后结束?scroll=10m (Caused by <class 'httplib.BadStatusLine'>: ''))

方法2:

query={"query" : {"match_all" : {}}}
scanResp= helpers.scan(client= es, query=query, scroll= "10m", index="", doc_type="patent", timeout="10m")

for resp in scanResp:
    print "Hiya"
Run Code Online (Sandbox Code Playgroud)

如果我在for循环之前打印出scanResp,我得到了<generator object scan at 0x108723dc0>.因此,我相对肯定我以某种方式弄乱了我的卷轴,但我不知道在哪里或如何解决它.

结果: 在此输入图像描述 再次,scroll/它给出滚动ID后,然后结束?scroll=10m (Caused by <class 'httplib.BadStatusLine'>: '')) …

python elasticsearch

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

具有多个排除的Elasticsearch聚合查询

我在ES数据库中有一堆公司数据.我想要计算每个文件中出现的文件的数量,但是我在聚合查询时遇到了一些问题.我希望排除诸如"公司"或"公司"之类的术语 到目前为止,我已经能够按照以下代码一次成功完成一个任期.

{
    "aggs" : {
        "companies" : {
            "terms" : {
                "field" : "Companies.name",
                "exclude" : "corporation"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个回报

"aggregations": {
    "assignee": {
         "buckets": [
            {
               "key": "inc",
               "doc_count": 375
            },
            {
               "key": "company",
               "doc_count": 252
            }
         ]
     }
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望能够做类似的事情

{
    "aggs" : {
        "companies" : {
            "terms" : {
                "field" : "Companies.name",
                "exclude" : ["corporation", "inc.", "inc", "co", "company", "the", "industries", "incorporated", "international"],
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我找不到一种不会引发错误的方法

我查看了ES文档中聚合的"术语"部分,并且只能找到单个排除的示例.我想知道是否可以排除多个术语,如果是,那么这样做的正确语法是什么.

注意:我知道我可以将字段设置为"not_analyzed"并获取完整公司名称的分组,而不是拆分名称.但是,由于分析允许存储桶更容忍名称变化(即微软公司和微软公司),我对此犹豫不决.

filter elasticsearch elasticsearch-aggregation

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

使用Python在Neo4j中获取节点ID

我最近开始使用Neo4j并且正在努力了解事情是如何运作的.我正在尝试在我的脚本中创建的节点之间创建关系.我发现的cypher查询看起来应该可以工作,但我不知道如何获取id来替换#s

START a= node(#), b= node(#)
CREATE UNIQUE a-[r:POSTED]->b
RETURN r
Run Code Online (Sandbox Code Playgroud)

neo4j cypher

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

获取 PCAP 文件中的所有 ip

我有一组 PCAP 文件,我需要检索所有 ip。我找到了这个链接,目前一直在使用这个命令。

tshark_path + " -r " + infile + " -T fields -e ip.dst | sort | uniq
Run Code Online (Sandbox Code Playgroud)

问题是,这似乎是很慢,还时不时返回的东西,看起来像这样:128.219.232.12,10.78.0.131。我的问题是是否有更好的方法来做到这一点,它可以运行得更快、更准确。

同样值得注意的是,我的代码是在 python 中的。

python pcap wireshark tshark

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