如何使用Elasticsearch .js和Angular在Elasticsearch上搜索嵌套对象
How to search nested objects on Elasticsearch using elasticsearch.js and Angular
我想在elasticsearch数据库上搜索嵌套文档上的字段。我使用以下命令搜索嵌套对象上的字段(获得10个内部命中):
curl -X GET 'http://localhost:9200/jira-dev/_search?pretty=true' -d '
{
"_source" : false,
"query" : {
"nested" : {
"path" : "issues",
"query" : {
"bool": {
"should": [
{
"wildcard":{
"issues.fields.description":"*migrate*"
}
},
{
"wildcard":{
"issues.fields.comment.comments.body":"*autodeploy*"
}
}
]
}
},
"inner_hits" : {"size": 5000}
}
}
}'
但是当我尝试使用elasticsearch.js以这种方式调用它时,它没有得到任何结果:
client.search({
index: 'jira-dev/',
type: 'jira',
body: {
query: {
nested : {
path : "issues",
query : {
bool: {
should: [
{
wildcard:{
"issues.fields.description":"*migrate*"
}
},
{
wildcard:{
"issues.fields.comment.comments.body":"*autodeploy*"
}
}
]
}
},
inner_hits : {size: 5000}
}
}
}
}).then(function (resp) {
var hits = resp.hits.totals;
console.log('works');
}, function (err) {
console.log('epic fail');
console.trace(err.message);
});
我认为我使用的语法是不正确的,但我没有发现使用elasticsearch.js嵌套查询的任何示例。
提前感谢。
编辑:根据要求,以下是文档的配置:
curl -X POST 'http://localhost:9200/jira-dev/' -d '{
"mappings" : {
"jira" : {
"properties" : {
"expand" : {"type" : "string"},
"startAt" : {"type" : "integer"},
"maxResults" : {"type" : "integer"},
"total" : {"type" : "integer"},
"issues" : {
"type" : "nested",
"include_in_parent" : false,
"properties" : {
"created" : {"type" : "date", "format" : "date_hour_minute_second_fraction"}
}
}
}
}
},
"settings" : {
"number_of_shards" : 5,
"number_of_replicas" : 1
}
}'
和一个例子:
{
"_index": "jira-dev",
"_type": "jira",
"_id": "1",
"_version": 1,
"_score": 1,
"_source": {
"expand": "schema,names",
"startAt": 0,
"maxResults": 1000,
"total": 604,
"issues": [
{
"key": "STACK-1",
"fields": {
"summary": "A nice summary",
"created": "2016-06-28T09:45:32.000+0000",
"description": null,
"comment": {
"startAt": 0,
"maxResults": 1,
"total": 1,
"comments": [
{
"self": url",
"id": "30293",
"author": {
"name": "stack_overflow",
"key": "stack_overflow"
},
"body": "Following epic has been created: url",
"updateAuthor": {
"name": "stack_overflow",
"key": "stack_overflow",
"timeZone": "Europe/Madrid"
},
"created": "2016-03-04T10:09:11.000+0000",
"updated": "2016-03-04T10:09:11.000+0000"
}
]
}
}
}
]
}
}
最后,为了跳过这个问题,我在angular和elastic之间使用了一个中间件服务器。这个服务器是一个python服务器,很容易通过curl对elasticsearch进行GET/POST操作。
此外,我尝试直接在Angular中使用curl (html GET),但由于惯例,html服务器可以忽略GET请求中的数据。因此,通过Angular的curl,不可能在elastic上执行请求。
相关文章:
- 用程序搜索JQuery数据表中的文本
- 在html Select中添加搜索
- Ajax Live搜索发布到Laravel视图
- 谷歌放置API:按国家或餐馆名称搜索餐馆
- 学生搜索项目jquery/javascript
- 用于搜索的聚合物嵌套绑定
- ElasticSearch - 从 Javascript 搜索 3 个索引
- 将参数传递给elasticsearch javascript api搜索请求的回调函数
- Elasticsearch多字段模糊搜索未首先返回精确匹配
- 使用ElasticSearch搜索变量定义字段
- 基于英语分析器的ElasticSearch中的短语搜索
- Elasticsearch: Javascript如何搜索文件模板
- 如何用AngularJS显示Elasticsearch短语建议器中的搜索建议
- elasticsearch-js库中的多字段搜索
- ElasticSearch和不可预测的搜索文档
- 用Elasticsearch的搜索数据填充谷歌图表
- Elasticsearch javascript数组中的搜索字段
- Elasticsearch多字段搜索
- elasticsearch全文搜索包含开始和结束时间的所有字段
- 如何使用Elasticsearch .js和Angular在Elasticsearch上搜索嵌套对象