我的 Elasticsearch (v5.4.1) 文档有一个_patents这样的字段:
{
// (Other fields : title, text, date, etc.)
,
"_patents": [
{"cc": "US"},
{"cc": "MX"},
{"cc": "KR"},
{"cc": "JP"},
{"cc": "CN"},
{"cc": "CA"},
{"cc": "AU"},
{"cc": "AR"}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试构建一个查询,该查询将仅返回其专利与国家/地区代码数组匹配的文档。例如,如果我的过滤器是,["US","AU"]我需要返回所有US在AU. 排除具有US但不具有AU.
到目前为止,我已经尝试向我当前的工作查询添加一个“术语”字段:
{
"query": {
"bool": {
"must": [
// (Other conditions here : title match, text match, date range, etc.) These work
,
{
"terms": {
"_patents.cc": [ // I tried just "_patents"
"US",
"AU"
]
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者这个,作为过滤器:
{
"query": {
"bool": {
"must": [...],
"filter": {
"terms": {
"_patents": [
"US",
"AU"
]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这些查询和我尝试过的变体不会产生错误,但会返回 0 结果。
我无法将 ES 文档模型更改为更容易匹配的模型,例如"_patents": [ "US","CA", "AU", "CN", "JP" ]因为这是一个填充字段。在索引时,我填充和引用Patent具有许多字段的文档,包括cc.
我找到了解决方案。过滤后的国家名称必须是小写...
"US"不返回结果,但"us"有效,尽管索引字段是"US"...... Faint -_-'
我也这样写查询:
{
"query": {
"bool": {
"must": [
{
"term": {
"_patents.cc": "us"
}
},
{
"term": {
"_patents.cc": "ca"
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
这适用于大写和小写。
{
"query": {
"bool": {
"must": [
{
"match": {
"_patents.cc": "au"
}
},
{
"match": {
"_patents.cc": "us"
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的elasticsearch版本是6.0.1。我正在使用这种方法:
GET <your index>/_search
{
"query": {
"bool": {
"must": [{
"query_string": {
"query": "cc:us OR cc:ca"
}
}]
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16082 次 |
| 最近记录: |