小编eri*_*ric的帖子

Elasticsearch-获取给定字段的所有值?

我一直在寻找Elasticsearch文档,但我无法找到我正在寻找的内容.

是否可以查询特定字段的所有值?假设我有"文章"并且每篇文章都有作者,我是否可以执行查询以查找所有作者的列表?

谢谢!

elasticsearch

42
推荐指数
2
解决办法
5万
查看次数

如何判断文件何时"完成"复制到监视目录?

我正在使用WatchService API来监视目录,并在用户开始将文件复制到目录中时获取ENTRY_CREATE事件.我正在使用的文件可能很大,我想知道副本何时完成.是否有任何内置的java API可用于实现此目的,或者我最好只是跟踪创建的文件的大小并在大小停止增长时开始处理?

编辑:这是我的示例代码:

package com.example;

import java.io.File;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;

public class Monitor {
    public static void main(String[] args) {
        try {
            String path = args[0];

            System.out.println(String.format( "Monitoring %s", path  ));
            WatchService watcher = FileSystems.getDefault().newWatchService();
            Path watchPath = FileSystems.getDefault().getPath(path);

            watchPath.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY);

            while (true) {
                WatchKey key = watcher.take();
                for (WatchEvent<?> event: key.pollEvents()) {
                    Object context = event.context();
                    System.out.println( String.format( "Event %s, type %s", context, event.kind() )); …
Run Code Online (Sandbox Code Playgroud)

java file path

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

S3:如果由其他用户创建,则用户无法访问自己的s3存储桶中的对象

外部用户可以使用我们的存储桶策略中的以下操作访问我们的s3存储桶:

"Action": [
            "s3:GetObjectAcl",
            "s3:GetObject",
            "s3:PutObjectAcl",
            "s3:ListMultipartUploadParts",
            "s3:PutObject"
        ]
Run Code Online (Sandbox Code Playgroud)

该用户生成了临时凭证,然后用于将文件上传到我们的存储桶中.

现在,我无法访问该文件.在s3用户界面中,如果我尝试下载文件,我会得到403.如果我尝试更改该对象的权限,我会看到消息:"抱歉!您无权查看该存储桶." 如果外部用户在使用临时凭证上载文件时设置了适当的标头(x-amz-acl bucket-owner-full-control),我可以正常访问该文件.我觉得很奇怪,即使我拥有该存储桶,外部用户也可以将文件放入我无法访问的文件中.

是否有可能我可以设置一些策略以便我可以访问该文件,或者这样我可以访问添加到我的存储桶的任何文件,无论它是如何添加的?谢谢!

permissions amazon-s3 amazon-web-services

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

如何让Spring RabbitMQ创建一个新的Queue?

在使用rabbit-mq的(有限)经验中,如果为尚不存在的队列创建新的侦听器,则会自动创建队列.我正在尝试使用带有rabbit-mq的Spring AMQP项目来设置一个监听器,而我正在收到错误.这是我的xml配置:

<rabbit:connection-factory id="rabbitConnectionFactory" host="172.16.45.1" username="test" password="password" />

<rabbit:listener-container connection-factory="rabbitConnectionFactory"  >
    <rabbit:listener ref="testQueueListener" queue-names="test" />
</rabbit:listener-container>

<bean id="testQueueListener" class="com.levelsbeyond.rabbit.TestQueueListener"> 
</bean>
Run Code Online (Sandbox Code Playgroud)

我在RabbitMq日志中得到了这个:

=ERROR REPORT==== 3-May-2013::23:17:24 ===
connection <0.1652.0>, channel 1 - soft error:
{amqp_error,not_found,"no queue 'test' in vhost '/'",'queue.declare'}
Run Code Online (Sandbox Code Playgroud)

和AMQP类似的错误:

2013-05-03 23:17:24,059 ERROR [org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer] (SimpleAsyncTaskExecutor-1) - Consumer received fatal exception on startup
org.springframework.amqp.rabbit.listener.FatalListenerStartupException: Cannot prepare queue for listener. Either the queue doesn't exist or the broker will not allow us to use it.
Run Code Online (Sandbox Code Playgroud)

从堆栈跟踪看来,队列是以"被动"模式创建的 - 任何人都可以指出我如何创建不使用被动模式的队列,所以我没有看到这个错误?还是我错过了别的什么?

java spring amqp rabbitmq

12
推荐指数
3
解决办法
3万
查看次数

MessageDigest MD5算法没有返回我期望的内容

我脑子里的东西告诉我,我在这里遗漏了一些明显的东西.

我正在将现有的java项目与第三方api集成,后者使用api密钥的md5哈希进行身份验证.它对我不起作用,在调试过程中我意识到我生成的哈希值与它们提供的示例不匹配.我发现一些网站用字符串创建MD5哈希来检查他们的例子,据我所知,我错了,他们是对的.

例如,根据该网站,字符串"hello"生成散列"5d41402abc4b2a76b9719d911017c592".(FWIW我对这个网站一无所知,只是它似乎正确地散列了我的例子).当我通过我的代码运行它时,我得到:

XUFAKrxLKna5cZ2REBfFkg ==

这是我用来生成md5哈希/字符串的简单方法:

private String md5(String md5Me) throws Exception {
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.reset();
    md.update(md5Me.getBytes("UTF-8"));

    return Base64.encodeBase64String(md.digest());
}
Run Code Online (Sandbox Code Playgroud)

上周,我使用一种非常类似的方法使用SHA1算法成功验证了不同的API.我想知道如果这个问题是关系到org.apache.commons.net.util.Base64.encodeBase64String ...任何帮助是极大的赞赏,如果只是一些测试,看看是否ByteArray将正确的,但转换后的字符串是错误的.

java md5

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

File.length()在Java中返回不正确的值

在文件对象上调用.length()时,超过2 GB的文件将返回不正确的值.

这发生在运行在tomcat容器中的Web应用程序中.

例如,Windows报告为2,083,344,714字节的文件将从java返回为1887961088.

以下是环境细节:

  • jdk 1.6.0_24(64位)
  • Java JotSpot(TM)64位服务器VM(内置17.0-b17,混合模式)
  • Tomcat 6.0.29
  • Windows Server 2008 r2

所以我立即怀疑与32位虚拟机有关,但一切似乎都是以64位运行.我完全难过,任何帮助将不胜感激,如果只是帮助开发一些测试,看看问题是否与32模式运行的东西有关..

编辑:

回答一些评论:当我使用相同的JVM(只输出file.length)运行一个非常简单的测试用例时,我得到了正确的值:2,083,344,714.

我非常有信心这应该有用,我只是觉得我的tomcat配置/ java配置/应用程序让我很难过.它只影响超过一定大小的文件这一事实确实使它看起来像32位与64位的问题,但据我所知,一切都是64位.

编辑2:开始怀疑这几乎是不可能的,我可能会遇到一个线程在完全复制之前占用文件长度的问题.当我弄明白时,如果有人关心的话,我会在这里发帖:-)

java file

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

为什么Elastic Search java API忽略了我们的查询限制?

我正在使用此代码:

client.prepareSearch("test").addSort("dateUpdated", SortOrder.DESC)
            .setSearchType(SearchType.DFS_QUERY_AND_FETCH)
            .setIndices("reach")
            .setTypes(types)
            .setQuery(QueryBuilders.queryString(queryString))
            .setFrom(0).setSize(2).setExplain(true)
            .execute()
            .actionGet()
Run Code Online (Sandbox Code Playgroud)

客户端是远程客户端.总共有5个结果,基于我的上述结果,我只希望有两个结果可以回来.然而所有5人都回来了.如果我将大小设置为0,则没有任何回复(正如预期的那样)我缺少什么?我觉得我误解了一些关于起源/大小的东西.我的查询字符串只是"name:*".任何帮助是极大的赞赏!

java elasticsearch

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

ThreadPoolExecutor#getActiveCount()的"近似"程度如何?

ThreadPoolExecutor#getActiveCount()的javadoc 表示方法"返回正在执行任务的大致线程数".

是什么让这个数字接近,而不是确切?是否会报告活动线程?

这是方法:

/**
 * Returns the approximate number of threads that are actively
 * executing tasks.
 *
 * @return the number of threads
 */
public int getActiveCount() {
    final ReentrantLock mainLock = this.mainLock;
    mainLock.lock();
    try {
        int n = 0;
        for (Worker w : workers)
            if (w.isLocked())
                ++n;
        return n;
    } finally {
        mainLock.unlock();
    }
}
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading

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

微服务架构 - 跨域干扰

我有一个采用微服务架构的相对较新的项目.除了我们的安全服务之外,我对各个服务的大小和粒度感觉相当不错.

我有三个主要的服务,让我们说foo-service,bar-servicebaz-service.这些服务从不需要通信,但所有这三种服务都经常通过HTTP请求与之通信security-service.我希望这种情况因各种原因而停止 - 最大的问题是每个对我个人服务的请求都会产生对安全服务的请求,一旦你考虑到负载平衡等问题就会变成几个额外的跳跃.我一直在阅读Mark Richards撰写的"软件架构模式",他建议在这些情况下,您应共享数据库并违反DRY:将所需功能复制到每个服务中.不过,他将此示例用于较小的"实用程序"类,这可能不适用于此实例.

安全服务并不是那么大,所以我绝对可以将其复制到其他每个服务中.也就是说,它足够大,以至于我感觉很难复制并粘贴它 - 根据工作服的314'相关'代码行(java所以有更多的实际代码;-).我可以很容易地把它变成一个每个服务带来的模块 - 但是我的服务有一个共享的依赖关系,而且过去一直困扰着我.当然,随着我们添加身份验证方法,安全代码会随着时间的推移而增长,但是当涉及到auth时,我们并没有重新发明轮子,所以它主要与其他库和身份验证服务集成.也就是说,我不认为这个特定的代码库变得巨大.

所以我的问题是,我应该复制并粘贴代码还是构建每个服务带来的模块?谢谢!

architecture soa microservices

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

将动态模板应用于多种类型 - 用于管理令牌以进行排序

我们在确定如何最好地管理我们的标记化和未标记化字段以进行搜索和排序时遇到了一些困难.我们的目标很简单:

  1. 支持部分单词搜索
  2. 支持对所有字段进行排序
  3. 我们的映射必须是动态的,客户在运行时添加新字段.

我们可以使用动态模板完成此任务.我们使用默认的标记生成器,自定义的ngram标记生成器和未经分析的标记生成器来存储字符串.映射:

curl -XPUT 'http://testServer:9200/test/' -d '{
        "settings": {
            "analysis": {
                "analyzer": {
                    "my_ngram_analyzer": {
                        "tokenizer": "my_ngram_tokenizer",
                        "filter": [
                            "lowercase"
                        ],
                        "type" : "custom"
                    },
                    "default_search": {
                        "tokenizer" : "keyword",
                        "filter" : [
                            "lowercase"
                        ]
                    }
                },
                "tokenizer": {
                    "my_ngram_tokenizer": {
                        "type": "nGram",
                        "min_gram": "3",
                        "max_gram": "100",
                        "token_chars": []
                    }
                }
            }
        },
        "mappings": {
            "TestObject": {
                "dynamic_templates": [
                    {
                        "metadata_template": {
                            "match_mapping_type": "string",
                            "path_match": "*",
                            "mapping": {
                                "type": "multi_field",
                                "fields": {
                                    "ngram": {
                                        "type": "{dynamic_type}",
                                        "index": …
Run Code Online (Sandbox Code Playgroud)

elasticsearch

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