我试图按时间范围查询Elasticsearch索引,另外还有一个术语匹配特定的字符串值.
我试过这个查询,看起来非常简单:
{
"query" : {
"bool": {
"must": [
{
"match": {
"method": "/customer/help"
}
},
{
"range" : {
"startTime": {
"from" : "2015-10-20T13:00-04:00",
"to" : "2015-10-20T14:00-04:00"
}
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我希望在给定时间范围内的所有文档也具有方法值"/customer/help".
在我的结果中,我收到的时间范围内的结果,但是"method"当我只想"/customer/help"在该字段中获得结果时,我会获得具有该字段的各种值的文档.
我找到了一个没有找到的CacheManager bean ...但是我还没有尝试过使用CacheManager做任何事情!
这是我的错误!
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cache.interceptor.CacheInterceptor#0': Cannot resolve reference to bean 'cacheManager' while setting bean property 'cacheManager'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cacheManager' is defined
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:336)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1456)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1197)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) …Run Code Online (Sandbox Code Playgroud) 我刚刚在Windows机器上下载并安装了最新版本的Elasticsearch.我做了我的第一次搜索查询,一切似乎都正常.然而.当我试图突出搜索结果时,我失败了.所以,这就是我的查询的样子:
$params = [
'index' => 'test_index',
'type' => 'test_index_type',
'body' => [
'query' => [
'bool' => [
'should' => [ 'match' => [ 'field1' => '23' ] ]
]
],
'highlight' => [
'pre_tags' => "<em>",
'post_tags' => "</em>",
'fields' => (object)Array('field1' => new stdClass),
'require_field_match' => false
]
]
]
$res = $client->search($params);
Run Code Online (Sandbox Code Playgroud)
总的来说,查询本身效果很好 - 结果被过滤了.在控制台中我看到,所有文档确实在其field1字段中包含"23"值.但是,这些标签 - <em></em>根本不会添加到结果中.我所看到的只是field1像" some text 23"," 23 another text"中的原始值.这不是我期望看到的 - " some text <em>23</em>"," …
我正在使用Spring AOP进行日志记录.我想创建一个适用于除具有特定注释的方法之外的所有方法的切入点,但我不知道如何去做.我发现的只是如何包含带注释的方法.
我们正在运行一个elasticsearch集群,用于记录日志,使用logstash从多个位置索引日志.我们最近添加了两个额外的节点以增加容量,同时我们等待集群扩展的更多硬件.最终,我们的目标是在SSD上运行"实时"数据的2个节点,以便快速访问最近的数据,并将数据老化到较旧的指标的HDD上.我们放入的新节点的内存比现有机箱少得多(700GB对5TB),但考虑到这与我们实施SSD时的情况类似,我并不认为这是一个很大的问题. .
作为第一次尝试,我将节点扔进集群中,信任新的基于磁盘空间的分配规则意味着它们不会立即被填满.不幸的是,情况并非如此,我醒来发现群集已经快速地将分片重新分配到新节点上,超过99%.在设置了一些跳汰之后,我设法从这些节点中删除所有数据,并将群集返回到之前的状态(分配了所有分片,群集状态为绿色).
作为下一个方法,我尝试实现索引/节点标记,类似于我实施SSD时的计划.这给我们留下了以下配置:
(运行elasticsearch 1.3.1和oracle java 7 u55的所有节点)
使用策展人我然后将超过10天的标记标记为"存档",将更新的标记标记为"实时".这在后台设置索引分片分配"需要".我的理解是它需要节点有标签,但不仅仅是标签.
不幸的是,这似乎没有产生预期的效果.最令人担忧的是,没有标记为归档的索引正在分配其副本分片,留下295个未分配的分片.此外,实时标记的指示仅使用节点4,5和奇怪的3.除了最新的索引和一些kibana-int分片之外,节点3没有分片.
如果我删除标签并使用exclude._ip从新节点拉出分片,我可以(慢慢地)将群集恢复为绿色,因为这是我在新节点完全填满时采用的方法,但我真的喜欢将此设置排序,以便我可以放心,当新套件到货时,SSD配置将起作用.
我试图启用:cluster.routing.allocation.allow_rebalance to always,理论上由于未分配的副本,集群没有重新平衡.我也尝试过:cluster.routing.allocation.enable给所有人,但同样,这没有任何可辨别的影响.
我做过一些明显错误的事吗?或者是否存在我可以使用的某种不一致?我一直在使用Elasticsearch Head插件可视化分片的分配.
任何帮助将不胜感激,希望这只是一个愚蠢的错误,我可以很容易地解决!
提前致谢
我在ES集群中有很多不同的文档,我想知道如何找到所有包含field的文档num-users?
我使用的是Spring 4.0.3.RELEASE和EHcache 2.8.1.在JBoss 7.1.1上
在applicationContext.xml我的缓存中使用以下配置工作正常.
<cache:annotation-driven/>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="ehcache"/>
</bean>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="/WEB-INF/ehcache.xml"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
现在我想用MBean添加监视功能.我更改了配置applicationContext.xml如下 - 添加了2个新bean"managementService"和"mbeanServer",没有其他更改.这是当前配置.
<cache:annotation-driven/>
<bean id="managementService"
class="net.sf.ehcache.management.ManagementService"
init-method="init"
destroy-method="dispose">
<constructor-arg ref="cacheManager"/>
<constructor-arg ref="mbeanServer"/>
<constructor-arg index="2" value="true"/>
<constructor-arg index="3" value="true"/>
<constructor-arg index="4" value="true"/>
<constructor-arg index="5" value="true"/>
</bean>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="ehcache"/>
</bean>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="/WEB-INF/ehcache.xml"/>
</bean>
<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
<property name="locateExistingServerIfPossible" value="true"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
使用此配置,我在应用程序服务器启动时收到以下错误.
14:05:32,208 ERROR [org.springframework.web.context.ContextLoader] (MSC service thread 1-1) Context …Run Code Online (Sandbox Code Playgroud) 跑出磁盘空间,搞砸了弹性搜索碎片.现在有三个节点为红色,两个节点已恢复,状态为黄色.ES在CPU上运行150%,在内存上运行很高,试图恢复它们.但看起来有一些版本匹配冲突.
我清理了磁盘空间并删除了分片的translog以停止从translog加载.但令人惊讶的是,translog再次被创建!
请分享如何阻止此尝试从translog恢复并恢复正常索引操作.我不想删除分片数据.
[2014-10-31 03:11:43,742][WARN ][cluster.action.shard ] [Angela Cairn] [western_europe][4] sending failed shard for [western_europe][4], node[x5M73qVXS5eZIBdz40boEg], [P], s[INITIALIZING], indexUUID [wy-tIJqdQiynz5SGQ2IrGA], reason [Failed to start shard, message [IndexShardGatewayRecoveryException[[western_europe][4] failed to recover shard]; nested: ElasticsearchException[failed to read [tweet][527924645014818817]]; nested: ElasticsearchIllegalArgumentException[No version type match [101]]; ]]
[2014-10-31 03:11:43,742][WARN ][cluster.action.shard ] [Angela Cairn] [western_europe][4] received shard failed for [western_europe][4], node[x5M73qVXS5eZIBdz40boEg], [P], s[INITIALIZING], indexUUID [wy-tIJqdQiynz5SGQ2IrGA], reason [Failed to start shard, message [IndexShardGatewayRecoveryException[[western_europe][4] failed to recover shard]; nested: ElasticsearchException[failed to read [tweet][527924645014818817]]; nested: ElasticsearchIllegalArgumentException[No version type …Run Code Online (Sandbox Code Playgroud) 我正在使用Elasticsearch GeoHash网格聚合进行地图聚类.查询平均返回100-200个桶.每个存储桶都使用top_hits聚合,我用它为每个聚合集群返回3个文档.
问题是我只想在父聚合(GeoHash)聚合不超过3个文档时才返回top_hits .
如果一个集群聚合超过3个文档,我不希望ES返回该集群的任何文档(因为我不会使用它们).
我试图使用Bucket Selector Aggregation,但没有设法构造一个正确的bucket_path.我在与top_hits聚合相同的级别上使用桶选择器聚合.可以使用存储桶的总文档数量,top_hits.hits.total但我得到的是reason=path not supported for [top_hits]: [hits.total].
这在弹性搜索中是否可行?这对我来说很重要,因为在大多数查询中,只有一小部分桶的文档少于3个.但是,对于1000个文档的集群,顶级命中子分段总是返回前3个文档.如果查询结果返回200个桶,并且只有5个正在聚合<= 3个文档,那么我只想返回5*3个文档,而不是200*3(在这种情况下Te响应为10MB).
这是我的查询的aggs部分:
"clusters": {
"geohash_grid": {
"field": "coordinates",
"precision": 3
},
"aggs": {
"top_hits": {
"top_hits": {
"size": 3
}
},
"top_hits_filter": {
"bucket_selector": {
"buckets_path": {
"total_hits": "top_hits._count" // tried top_hits.hits.total
},
"script": {
"inline": "total_hits <= 3"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个大约有 10 亿条记录的 Solr 索引。每条记录有两个字段——姓名和地址。
对于名称字段,我使用 Beider Morse 过滤器进行语音学。我也有(将创建)好的同义词(如班加罗尔和班加罗尔)和停用词(如村镇城市先生等)列表。我也对我在这两个领域使用的标记器感到满意。
我无法创建仅提供良好匹配结果的查询。有人可以为我提供有用的建议吗?
基本上,我想区分给定名称和地址的不匹配、可能匹配和完全匹配。尽管这是一个非常主观的话题,因为这三种类型之间的界限很窄。
由于 Solr 分数是相对的,因此完全不建议根据分数设置截止边界。如果不是这个,我还能做什么?
来自我的一个相关问题,其中提到了我正在尝试做的一部分 -如何形成具有多个字段和不同字段的不同最小匹配和提升的 Solr edismax 查询?