2017-11-13 2 views
0

Ich habe ein Array von Artikeln in einer MongoDB-Datenbank, die in Elasticsearch indiziert ist. Jeder Artikel in MongoDB enthält eine Reihe von Autorennamen wie: ['Michael Jordan', '...']. Jeder Artikel wird dann in Es indiziert.Wie soll ich eine Post_Filter-Abfrage so formatieren, dass sie einer Zeichenfolge innerhalb einer Zeichenfolge in Elasticsearch entspricht?

In Es habe ich Aggregation von Autor arbeiten, aber ich möchte auch ein post_filter anwenden, um Ergebnisse nach Autor zu filtern. Wie sollte eine post_filter-Abfrage dafür ausgelegt sein?

Es Schema (kann geändert werden):

{ 
    authors: ['Michael Jordan', 'Kobe Bryant'], 
    authorsString: 'Michael Jordan;Kobe Bryant;' 
} 

Dies ist ein Beispiel Abfrage vor dem post_filter Anwendung:

{ 
    ... 
    aggs: { 
    authors: { 
     terms: { 
     field: 'authorsArray.keyword', 
     }, 
    }, 
    }, 
    post_filter: {}, 
} 

Wenn ich will, Artikel, von denen zu finden, zumindest einer der Autoren ist "Michael Jordan", wie benutze ich post_filter?

+0

Was ist die Zuordnung von Autoren? - Können Sie es bitte zeigen? –

Antwort

0

Wenn der Autor Feld nicht ausgewertet ist, können Sie immer einfach nur durch Zeitfilter wie so

"post_filter": { 
    "term": { "authors": "Michael Jordan" } 
} 
+0

Ich denke mit dieser Antwort könnte es ein Problem geben, wo, wenn die Autor-Zeichenfolge "Michael Jackson; Alex Jordan" hat, als diese Abfrage würde nicht richtig entsprechen. Ich bin stattdessen mit der Abfrage match_prase wie unten angegeben gegangen und es funktioniert. –

+0

Wenn es sich um eine einzelne Saite handelt, die sicher ist, aber basierend auf der Autorenliste, die er erstellt hat, scheint es nicht nur eine einzelne Saite zu sein. Ansonsten, wenn nur das authorsString-Feld bereitgestellt wird, dann stimme ich zu – Shadi

0

Hier finden Sie, was funktioniert innerhalb eines einzigen Zeichenfolge enthält viele Autorennamen den Namen des Autors übereinstimmen. (Es 5.6):

"post_filter": { 
    "bool": { 
     "should": [{ 
      "match_phrase": { 
       authorsString: author 
      } 
     }] 
    } 
} 
Verwandte Themen