Tag: elasticsearch

如何为Elasticsearch自定义插件编写测试?

我创建自定义Elasticsearch插件。 现在我想为这个插件编写一个测试。 我的期望是 – 我可以运行嵌入式Elasticsearch实例,正确设置它然后做一些测试(索引一些文档,然后查询它) 问题是我无法正确设置我的插件 自定义插件代码正在解析JSON查询并设置一些对象供以后使用: public class CustomQueryParserPlugin extends AbstractPlugin { public static final String PLUGIN_NAME = “custom_query”; private final Settings settings; @Inject public CustomQueryParserPlugin (Settings settings) { this.settings = settings; } @Override public String name() { return PLUGIN_NAME; } @Override public String description() { return “custom plugin”; } public void onModule(IndicesQueriesModule module) […]

Elasticsearch服务器发现配置

我安装了ElasticSearch服务器,我正在运行: $ ./elasticsearch -f {0.18.2}[11698]: initializing … loaded [], sites [] {0.18.2}[11698]: initialized {0.18.2}[11698]: starting … bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/192.168.1.106:9300]} new_master [Stingray][ocw4qPdmSfWuD9pUxHoN1Q][inet[/192.168.1.106:9300]], reason: zen-disco-join (elected_as_master) elasticsearch/ocw4qPdmSfWuD9pUxHoN1Q recovered [0] indices into cluster_state bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/192.168.1.106:9200]} {0.18.2}[11698]: started 如何配置Java客户端连接到此服务器? 我刚才: node.client=true 但是,在尝试连接之后我收到了: org.elasticsearch.discovery.MasterNotDiscoveredException: at org.elasticsearch.action.support.master.TransportMasterNodeOperationAction$3.onTimeout(TransportMasterNodeOperationAction.java:162) 如果我将java客户端配置为: node.data=false 我得到以下日志: INFO main node:internalInfo:93 – [Stark, Tony] {0.18.2}[13008]: starting […]

如何擦除ElasticSearch索引?

我的单元/集成测试包括搜索function的测试。 我的想法是在每次测试之前都有空的搜索索引。 所以,我试图删除setup方法索引中的所有元素(它是Groovy代码): Client client = searchConnection.client SearchResponse response = client.prepareSearch(“item”) .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(termQuery(‘name’, ‘test’)) //tried also matchAllQuery() .setFrom(0).setSize(100).setExplain(false).execute().actionGet() List ids = response.hits.hits.collect { return it.id } client.close() client = searchConnection.client ids.each { DeleteResponse delete = client.prepareDelete(“item”, “item”, it) .setOperationThreaded(false) .execute().actionGet() } client.close() 似乎它正在异步处理所有删除,所以我在它之后添加了Thread.sleep(5000) 。 如你所见,我试图打开/关闭连接几次 – 它没有帮助。 有时需要更多时间的问题,有时它需要超过5秒才能删除,有时它无法找到刚刚添加的数据(来自之前的测试)等等。最烦人的是集成测试变得不稳定。 将Thread.sleep()放在可能看起来不太好的解决方案的任何地方。 有没有办法提交最后的更改,或者锁定直到所有数据都被写入?

Elasticsearch中的索引是什么

Elasticsearch中的索引是什么? 一个应用程序有多个索引还是只有一个? 假设你为一些汽车制造商建立了一个系统。 它涉及人,汽车,备件等。你有一个名为制造商的索引,或者你有一个人的索引,一个汽车索引和三个备件? 有人能解释一下吗

Elasticsearch嵌套排序

我正在尝试在Elasticsearch中进行嵌套排序,但到目前为止还没有成功。 我的数据结构: { “_id” : 1, “authorList” : [ {“lastName”:”hawking”, “firstName”:”stephan”}, {“lastName”:”frey”, “firstName”:”richard”} ] } { “_id” : 2, “authorList” : [ {“lastName”:”roger”, “firstName”:”christina”}, {“lastName”:”freud”, “firstName”:”damian”} ] } 我想根据文件中第一作者的姓氏对文件进行排序。 使用的映射: “authorList” : { “type” : “nested”, “properties” : {“lastName”:{“type”:”keyword”}}} 使用SearchRequestBuilder(JAVA)排序: searchRequestBuilder.addSort( SortBuilders.fieldSort(“authorList.lastName”) .order(SortOrder.ASC) .sortMode(SortMode.MIN) .setNestedPath(“authorList”) ) 这可行,但不会给出想要的结果(例如,首先“叫卖”然后“罗杰”)。 我错过了什么吗? 有没有办法表明Elasticsearch访问数组authorList的index = 0? 是否有任何映射/规范化器分别索引数组的第一个条目?

ElasticSearch TransportClient 5.6版

我是Elastisearch Java API的新手 我安装了5.6版我的服务器elasticsearch正在运行 HTTP://本地主机:9200 / { “name” : “KJj0iv3”, “cluster_name” : “elasticsearch”, “cluster_uuid” : “0je2mMloQ52X_GT1itxGuA”, “version” : { “number” : “5.6.3”, “build_hash” : “1a2f265”, “build_date” : “2017-10-06T20:33:39.012Z”, “build_snapshot” : false, “lucene_version” : “6.6.1” }, “tagline” : “You Know, for Search” } 这是我的类Test Java public static void main(String[] args) throws UnknownHostException { try { TransportClient […]

将弹性搜索从1.4.3迁移到2.4 java代码

我从弹性搜索1.4.3迁移到2.4并替换了弹性搜索文档引用的代码片段,其他引用需要替换andFilter? 码:- TermQueryBuilder incPlatformFilter=QueryBuilders.termQuery(IdxSchemaConstants.FULL_OFFER_ACTION_INCLUSIVE_PLATFORMS, platformId); //For MissingQuerybuilder //MissingFilterBuilder incPlatformEmptyFilter = FilterBuilders.missingFilter(IdxSchemaConstants.FULL_OFFER_ACTION_INCLUSIVE_PLATFORMS); BoolQueryBuilder incPlatformEmptyFilter = new BoolQueryBuilder().mustNot(new ExistsQueryBuilder(IdxSchemaConstants.FULL_OFFER_ACTION_INCLUSIVE_PLATFORMS)); //NotFilterBuilder //NotFilterBuilder excPlatformFilter = FilterBuilders.notFilter(FilterBuilders.termFilter(IdxSchemaConstants.FULL_OFFER_ACTION_EXCLUSIVE_PLATFORMS, platformId)); TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery(IdxSchemaConstants.FULL_OFFER_ACTION_EXCLUSIVE_PLATFORMS, platformId); BoolQueryBuilder excPlatformFilter = new BoolQueryBuilder().mustNot(termQueryBuilder); QueryBuilder platformPartialMatched = QueryHelper.andFilterBuilders(excPlatformFilter, incPlatformEmptyFilter); public class QueryHelper { public static QueryBuilder andFilterBuilders(QueryBuilder… filterBuilders) { QueryBuilder filterBuilder = null; if (filterBuilders != […]

Elasticsearch映射设置’not_analyzed’并在Java中按字段分组

我正在尝试对结果进行分组,以便按类别对它们进行分组。 SearchResponse response = client.prepareSearch(“search”) .addAggregation(AggregationBuilders.terms(“category”).field(“category”).size(0)) .execute() .actionGet(); 上面的代码创建了聚合,但是我遇到了一个问题,其中带有连字符的字符串被分离并放入他们自己的“Bucket”中。 根据我的阅读,我需要更改映射设置,以便不分析类别,但我不知道如何做到这一点。 这是在写入Elasticsearch或阅读时完成的吗? 它是如何设置的?

弹性搜索中的模式匹配?

继续我之前的post ,我根据femtoRgon的post更改了查询,弹性搜索不支持某些字符和锚点。 我正在寻找匹配模式的方式,如“xxx-xx-xxxx”,以便使用elastic search带有社会安全号码的文档。 让我们假设,在索引文档中,我想找到所有那些社会安全号码与“xxx-xx-xxxx”模式匹配的文档。 索引文档的示例代码: InputStream is = null; try { is = new FileInputStream(“/home/admin/Downloads/20121221.doc”); ContentHandler contenthandler = new BodyContentHandler(); Metadata metadata = new Metadata(); Parser parser = new AutoDetectParser(); parser.parse(is, contenthandler, metadata, new ParseContext()); } catch (Exception e) { e.printStackTrace(); } finally { if (is != null) is.close(); } 用于搜索的示例代码 QueryBuilder queryBuilderFullText = […]

对未编制索引的字段进行部分更新

让我们考虑以下情况 – “文章”文档中有两个字段 – 内容(字符串)和视图(int)。 视图字段未编入索引。 views字段包含读取本文的次数。 来自官方文件 : 我们还说文件是不可变的:它们不能改变,只能被替换。 更新API必须遵守相同的规则。 在外部,似乎我们正在部分更新文档。 但是,在内部,更新API只管理我们已经描述的相同的retrieve-change-reindex进程。 但是,如果我们对非索引字段进行特定更新,那会怎么样?elasticsearch会重新索引整个文档吗? 例如 – 我想在每次有人阅读某篇文章时更新视图。 如果整个文档被重新编制索引,我无法进行实时更新(因为操作过于繁重)。 因此,我将不得不延迟工作,例如更新访问者每3-5-10分钟阅读的所有文章。 或者我明白了什么问题?