我正在开发一个使用弹性搜索的应用程序,在某些情况下,我想根据术语和区域设置进行搜索。我在localhost上测试这个
http://localhost:9200/index/type/_search
和参数
query : {
wildcard : { "term" : "myterm*" }
},
filter : {
and : [
{
term : { "lang" : "en" }
},
{
term : { "translations.lang" : "tr" } //this is subdocument search
},
]
}
以下是一个示例文档:
{
"_index": "twitter",
"_type": "tweet",
"_id": "5084151d2c6e5d5b11000008",
"_score": null,
"_source": {
"lang": "en",
"term": "photograph",
"translations": [
{
"_id": "5084151d2c6e5d5b11000009",
"lang": "tr",
"translation": "fotoğraf",
"score": "0",
"createDate": "2012-10-21T15:30:37.994Z",
"author": "anonymous"
},
{
"_id": "50850346532b865c2000000a",
"lang": "tr",
"translation": "resim",
"score": "0",
"createDate": "2012-10-22T08:26:46.670Z",
"author": "anonymous"
}
],
"author": "anonymous",
"createDate": "2012-10-21T15:30:37.994Z"
}
}
我正在尝试使用输入语言“en”和输出语言“tr”获取带通配符(用于自动完成)的术语。它正在获得具有“myterm”但不适用的术语,以及对此的操作。任何建议将不胜感激
提前致谢
答案 0 :(得分:2)
我猜想translations
元素有nested
类型。如果是这种情况,您应该使用nested查询:
curl -XPOST "http://localhost:9200/twitter/tweet/_search" -d '{
query: {
wildcard: {
"term": "term*"
}
},
filter: {
and: [{
term: {
"lang": "en"
}
}, {
"nested": {
"path": "translations",
"query": {
"term" : { "translations.lang" : "tr" }
}
}
}]
}
}'
答案 1 :(得分:1)
我已设法通过以下查询解决我的问题;
query : {
wildcard : { "term" : "myterm*" }
},
filter : {
and : [
{
term : { "lang" : "en" }
},
{
term : { "translations.lang" : "tr" } //this is subdocument search
}
]
},
sort : {
{"term" : "desc"}
}
这里重点是,您需要将排序字段设置为not_analyzed。因为,您无法对分析的字段进行排序。