2016-07-09 72 views
0
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "bool": { 
      "should": [ 
       { 
       "term": { 
        "content": { 
        "value": "远磐", 
        "boost": 5757544300000000000 
        } 
       } 
       }, 
       { 
       "term": { 
        "title": { 
        "value": "远磐", 
        "boost": 5757544300000000000 
        } 
       } 
       } 
      ], 
      "minimum_should_match": "1" 
      } 
     }, 
     { 
      "bool": { 
      "should": [ 
       { 
       "term": { 
        "title": { 
        "value": "互联", 
        "boost": 6456151 
        } 
       } 
       }, 
       { 
       "term": { 
        "content": { 
        "value": "杭州远磐互联科技有限公司", 
        "boost": 3.3149317e+37 
        } 
       } 
       } 
      ], 
      "minimum_should_match": "1" 
      } 
     } 
     ] 
    } 
    }, 
    "from": 0, 
    "size": 10 
} 

当我在搜索结果中创建弹性搜索查询时,发生错误。在ElasticSearch中查询时发生错误

我不知道这个错误。

错误:

IndexOutOfBoundsException[docID must be >= 0 and < maxDoc=158 (got docID=2147457971)] 

和所有命中的得分是零。

enter image description here 整个错误:

任何帮助,请!

Regards

+0

为什么你必须有另一个布尔?如果你可以上传你的需求和你的样本文件,会更有帮助吗? –

+0

该要求可描述为sql如下: 从db 选择文档 其中(field1 =“XXXX”或field2 =“*****”)和(field1 =“$$$$”或field3 =“&&&&”) – Daniel

+0

我发布了正确的查询作为答案,希望能够解决您的问题。 –

回答

1

我发表这篇文章作为答案,因为它不能张贴为评论。这是优化的查询。 缓存过滤器时最好使用过滤器而不是查询。你应该避免给予如此巨大的数字,因为它是资源饥渴。尝试相对较小的数字。

{ 
    "query": { 
    "bool": { 
     "must": { 
     "match_all": {} 
     }, 
     "filter": { 
     "and": [ 
      { 
      "or": [ 
       { 
       "term": { 
        "content": "远磐" 
       } 
       }, 
       { 
       "term": { 
        "title": "远磐" 
       } 
       } 
      ] 
      }, 
      { 
      "or": [ 
       { 
       "term": { 
        "content": "互联" 
       } 
       }, 
       { 
       "term": { 
        "title": "杭州远磐互联科技有限公司" 
       } 
       } 
      ] 
      } 
     ] 
     }, 
     "should": [ 
     { 
      "term": { 
      "content": "远磐", 
      "boost": 10 
      } 
     }, 
     { 
      "term": { 
      "title": "远磐", 
      "boost": 5 
      } 
     }, 
     { 
      "term": { 
      "content": "互联", 
      "boost": 3 
      } 
     }, 
     { 
      "term": { 
      "title": "杭州远磐互联科技有限公司", 
      "boost": 20 
      } 
     } 
     ], 
     "minimum_should_match": 1, 
     "boost": 1 
    } 
    }, 
    "from":0, 
    "size":10 
} 
+0

另一个问题是,所有的条款都有自己的权重,但过滤器不支持提升。 – Daniel

+0

你可以将这个查询转换成一个bool查询,把这些过滤器放入必须的部分,并在bool查询的应该部分应用boost,你可以在这里阅读更多https://www.elastic.co/guide/en/elasticsearch/ reference/current/query-dsl-bool-query.html –

+0

我已将查询转换为一个bool查询,并将所有必须的术语放在过滤器中,但它也有相同的错误。该术语的权重是否太大,导致ElasticSearch提升出现一些错误?该术语的最大权重约为3.3149317e + 37。 – Daniel

相关问题