2016-10-26 3 views
1

Ich benutze ElasticSearch 2.2 whith Indizes ich kann Mappings nicht leicht ändern und ich möchte einige Suchanfragen basierend auf Stichwörtern tun.Ändern der ElasticSearch-Punktzahl im Array-String-Feld?

Hier werden die Abbildungen von meinen String Array-Feld "keywords":

"keywords": { 
      "type": "string", 
      "norms": { 
       "enabled": false 
      }, 
      "analyzer": "analyzer_keyword" 

"analyzer_keyword": { 
       "filter": "lowercase", 
       "tokenizer": "keyword" 
      } 

Ich möchte es abzufragen, wie es mit Bool Anfrage mit POST:

{ 
    "query": 
    { 

    "bool" : { 
     "should" : 
     [ 
      { 
       "term": 
       { 
       "keywords": "foo bar", 
       } 
      }, 
      { 
       "term": 
       { 
       "keywords": "baz", 
       } 
      }, 
      { 
       "term": 
       { 
       "keywords": "qux", 
       } 
      } 
     ] 

    } 


    }, 
    "highlight": { 
    "fields" : { 
     "keywords" : {} 
    } 
    } 
} 

Ich werde wünschen, dass die besten Treffer Treffer sind, die das Maximum an Keywords enthält.

Beispiel Treffer sortieren nach Punktzahl i für diese Anfrage wünschen:

  1. {id: #x, keywords: [ "foo bar", "baz"]}
  2. {id: #z , keywords: [ "foo bar", "qux"]}
  3. {id: #Y, keywords: [ "qux"]}
  4. {id: #w, keywords: [ "baz"]}

Aber stattdessen habe ich einige Ergebnisse wie folgt:

  1. {id: #x, keywords: [ "foo bar", "baz"]}
  2. {id: #Y, keywords: [ "qux"]}
  3. {id: #z , keywords: [ "foo bar", "qux"]}
  4. {id: #w, keywords: [ "baz"]}

haben Sie eine Idee, kann mir helfen, es zu verwalten?

Entschuldigung für mein schlechtes Englisch und danke für Ihre Hilfe.

Antwort

0

Die Ergebnisse werden nach ihren Scores sortiert, und diese Scores hängen von vielen Kriterien ab, einschließlich der Häufigkeit der übereinstimmenden Terme in einem Shard. Aber es ist Ihnen egal, Sie wollen die gleiche Punktzahl für alle Klauseln Ihrer Bedingungen, was Sie verwenden können:

GET /test/test/_search 
{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "constant_score": { 
      "query": { 
       "term": { 
       "keywords": "foo bar" 
       } 
      } 
      } 
     }, 
     { 
      "constant_score": { 
      "query": { 
       "term": { 
       "keywords": "qux" 
       } 
      } 
      } 
     }, 
     { 
      "constant_score": { 
      "query": { 
       "term": { 
       "keywords": "baz" 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 
+0

Vielen Dank für Ihre Antwort. Boost kann mir in diesem Fall nicht helfen, denke ich. Ich möchte nach der Anzahl der Keyword-Übereinstimmungen sortieren. –

+0

In der Tat hatte ich die Frage falsch verstanden und dachte, dass Sie nach dem Offset des Tags in Ihrer Abfrage sortieren möchten, ich habe meine Antwort bearbeiten. Ich habe heute viel über das Punktesystem erfahren, danke :). – Pandawan

+0

Es funktioniert viel besser, aber ich habe immer einige Fehler. Ich werde das für den Moment behalten und letzteres versuchen. Danke für Ihre Antwort! –

Verwandte Themen