2016-07-09 3 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 
} 

Wenn ich die elasticsearch Abfrage bei der Suche nach dem Ergebnis erstellen, ist der Fehler aufgetreten.ein Fehler ist aufgetreten, wenn Abfrage in ElasticSearch

Ich habe keine Ahnung von diesem Fehler.

Fehler:

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

und die Punktzahl aller Hits Null ist.

enter image description here die ganzen Fehler:

Jede Hilfe bitte!

Grüße

+0

warum haben Sie ein anderes bool in Ihrem müssen? Es wäre hilfreicher, wenn Sie Ihre Anforderung und Ihr Beispieldokument hochladen könnten. –

+0

die Anforderung kann als die sql wie folgt beschrieben werden: Wählen Sie Dokument von db wo (field1 = "XXXX" oder field2 = "*****") und (field1 = "$$$$" oder field3 = "&&&&") – Daniel

+0

Ich poste die richtige Anfrage als Antwort, hoffe das löst dein Problem. –

Antwort

1

ich dies als Antwort bin Entsendung, da es nicht als Kommentar gepostet werden können. Hier ist die optimierte Abfrage. Es ist besser, Filter anstelle der Abfrage zu verwenden, wenn Filter zwischengespeichert werden. Sie sollten es vermeiden, so große Zahlen als Boost zu geben, wie es ressourcenhungrig ist. Versuchen Sie relativ kleinere Zahlen.

{ 
    "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

Eine andere Frage ist, dass alle Begriffe ihr eigenes Gewicht haben, aber der Filter unterstützt keinen Boost. – Daniel

+0

Sie können diese Abfrage in eine Bool-Abfrage konvertieren, setzen Sie diese Filter in müssen Teile und anwenden Boost auf sie in sollte Teil der Bool-Abfrage, können Sie mehr lesen Sie hier https://www.elastic.co/guide/en/elasticsearch/ reference/current/query-dsl-bool-query.html –

+0

Ich habe meine Abfrage in eine bool-Abfrage konvertiert und alle must-Ausdrücke in die Filter eingefügt, aber es hat auch den gleichen Fehler. Ist das Gewicht des Begriffs zu groß, um einige ElasticSearch-Boost-Fehler zu verursachen? Das maximale Gewicht des Begriffs beträgt etwa 3,3149317e + 37. – Daniel