我有一个看起来像这样的文档:
{
"_id":"some_id_value",
"_source":{
"client":{
"name":"x"
},
"project":{
"name":"x November 2016"
}
}
}
我正在尝试执行一个查询,该查询将为我获取每个客户端的唯一项目名称的计数。对于这一点,我在查询中使用cardinality
过project.name
。我确定4
该特定客户端只有唯一的项目名称。但是,当我运行查询时,我得到的计数5
,我知道这是错误的。
项目名称全部包含客户端的名称。例如,如果客户为“ X”,则项目名称将为“ X Testing November 2016”或“ X Jan
2016”,等等。我不知道这是不是一个考虑因素。
这是文档类型的映射
{
"mappings":{
"vma_docs":{
"properties":{
"client":{
"properties":{
"contact":{
"type":"string"
},
"name":{
"type":"string"
}
}
},
"project":{
"properties":{
"end_date":{
"format":"yyyy-MM-dd",
"type":"date"
},
"project_type":{
"type":"string"
},
"name":{
"type":"string"
},
"project_manager":{
"index":"not_analyzed",
"type":"string"
},
"start_date":{
"format":"yyyy-MM-dd",
"type":"date"
}
}
}
}
}
}
}
这是我的搜索查询
{
"fields":[
"client.name",
"project.name"
],
"query":{
"bool":{
"must":{
"match":{
"client.name":{
"operator":"and",
"query":"ABC systems"
}
}
}
}
},
"aggs":{
"num_projects":{
"cardinality":{
"field":"project.name"
}
}
},
"size":5
}
这些是我得到的结果(为简洁起见,我仅发布了2个结果)。请发现num_projects聚合返回5,但必须仅返回4,这是项目的总数。
{
"hits":{
"hits":[
{
"_score":5.8553367,
"_type":"vma_docs",
"_id":"AVTMIM9IBwwoAW3mzgKz",
"fields":{
"project.name":[
"ABC"
],
"client.name":[
"ABC systems Pvt Ltd"
]
},
"_index":"vma"
},
{
"_score":5.8553367,
"_type":"vma_docs",
"_id":"AVTMIM9YBwwoAW3mzgK2",
"fields":{
"project.name":[
"ABC"
],
"client.name":[
"ABC systems Pvt Ltd"
]
},
"_index":"vma"
}
],
"total":18,
"max_score":5.8553367
},
"_shards":{
"successful":5,
"failed":0,
"total":5
},
"took":4,
"aggregations":{
"num_projects":{
"value":5
}
},
"timed_out":false
}
FYI:项目名称ABC
,ABC Nov 2016
,ABC retest November
,ABC Mobile App
您需要为您的project.name
字段进行以下映射:
{
"mappings": {
"vma_docs": {
"properties": {
"client": {
"properties": {
"contact": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"project": {
"properties": {
"end_date": {
"format": "yyyy-MM-dd",
"type": "date"
},
"project_type": {
"type": "string"
},
"name": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
},
"project_manager": {
"index": "not_analyzed",
"type": "string"
},
"start_date": {
"format": "yyyy-MM-dd",
"type": "date"
}
}
}
}
}
}
}
从根本上讲raw
,这是一个子字段,在其中输入了相同的值project.name
,project.name.raw
但没有触及(进行标记或分析)。然后,您需要使用的查询是:
{
"fields": [
"client.name",
"project.name"
],
"query": {
"bool": {
"must": {
"match": {
"client.name": {
"operator": "and",
"query": "ABC systems"
}
}
}
}
},
"aggs": {
"num_projects": {
"cardinality": {
"field": "project.name.raw"
}
}
},
"size": 5
}
WildFly中安全域和安全域的主要区别是什么? 独立的。xml 和
需要在ElasticSearch中找到一种方法,以基于某个字段的特定值来提高文档的相关性。具体地说,在我的所有文档中都有一个特殊的字段,该字段值越高,包含该字段的文档就越相关,无论搜索如何。 考虑以下文档结构: 我希望具有较高boosting_field值的文档在本质上比具有较低boosting_field值的文档更相关。这只是一个起点--在确定搜索中每个文档的最终相关性得分时,还将考虑查询与其他
我有一个mongoDB数据库和一组歌曲。每个文档都包含标题、艺术家姓名和一些其他信息。 我的应用程序允许用户加载自己的播放列表。基本上,我最终会得到一个标题/艺术家列表,并希望将其与数据库中的内容进行匹配。如果这首歌不在我的数据库中,我会保存它,否则我会把它添加到用户的帐户中。 根据歌名和艺人价值搜索所有这些歌曲的最有效方法是什么?现在我正在循环搜索列表中的每首歌并在数据库中搜索它,但这非常耗时。
我有一个有多个分离的圆形区域的噪声图像是模糊的。具有六个感兴趣区域(ROI)的这种图像的示例是: 在Matlab中使用和给定的阈值很容易用全局阈值分割图像。但是我想相对于每个ROI(而不是整个图像)的最大像素值设置一个固定阈值(例如54%),来分割每个ROI。 我有一组不同ROI大小和位置的图像,我需要基于区域阈值分割来分割它们,因此我也无法使用Matlab交互工具来选择它们。 谢谢
问题内容: 需要在ElasticSearch中找到一种方法来根据字段的特定值来提高文档的相关性。具体来说,我所有文档中都有一个特殊字段,该字段值越高,包含该文档的文档就越相关,而与搜索无关。 考虑以下文档结构: 我希望boosting_field值较高的文档与那些boosting_field值较低的文档 本质上相关性 更高。这只是一个起点- 在确定搜索中每个文档的最终相关性分数时,还将考虑查询与其
问题内容: 我尝试在elasticsearchJava API上使用正则表达式运行全文搜索。我的过滤器是这样的: 但是它只与一个单词匹配,而没有短语匹配。我的意思是,例如: 如果soruce中有一个字符串,例如:“ ”,而当我的文本字符串如下:“ ”,“ ”,“ ” …时,它就起作用了。 但是,当我的realTimeTextIn字符串为“ ”时,全文搜索将不起作用。我搜索的单词不能超过一个。 我在