2016-03-31 17 views
-1

ich ganz in Elasticsearch bin neu hier, also wenn jemand mir Es seiSuche mit kommagetrennten Werten im Elasticsearch

hier helfen kann ich ausgewählt habe

1) Category - Hollywood 
2) Sub-Category - Bond Special 
3) Genre - Action & Drama & Comedy (as multiple selection will be there) 
4) Language - English, Russian and Hindi (as multiple selection will be there) 
5) Release Year - 1990,1999,2000 (as multiple selection will be there) 
6) 3D Movie - True OR False (any one will be selected) 
7) SortBy - “A-Z”OR “Z-A” OR “Date” 

Kann mir jemand helfen, für elastische diese Abfrage bei der Herstellung -Suche. Ich werde "match_phrase" verwenden, um UND-Bedingung zu machen, aber das Problem ist übereinstimmende Parameter oder Suchparameter werden mehrere und Komma getrennt (du kannst sagen). und meine Index-Matrix ist unten angegeben: -

[_source] => Array (
           [id] => 43 
           [value] => GREENBERG 
           [imageName] => Done 
           [date] => (1905) USA (Bengali) 
           [language] => (Bengali) | 1905 | 1.47hrs 
           [directorName] => Alejandro González Iñárritu, Ang Lee 
           [castForSearch] => Ben Stiller, John Turturro 
           [viewDetailsUrl] => /movie/greenberg 
           [movieType] => Animation 
           [rating] => 0 
           [cast] => Ben Stiller, John Turturro, Olivier Martinez 
           [synopsis] => A man from Los Angeles, who moved to New York years ago, returns to L.A. to figure out his life while he house-sits for his brother. He soon sparks with his brother's assistant. 
           [code] => HLR06 
           [type] => Non-3D 
           [trailer] => https://www.youtube.com/watch?v=cwdliqOGTLw 
           [imdb_code] => 1234654 
           [tags] => Array 
            (
             [0] => Animation 
            ) 

           [genre] => Adventure 
           [languages] => Bengali 
           [categories_filter] => Array 
            (
             [0] => Category 2,Hollywood 
            ) 

           [sub_categories_filter] => Array 
            (
             [0] => Sub-Category 1,Sub-Category 4,Sub-Category 5,Sub-Category 6,Sub-Category 7 
            ) 

            ) 

Weekly Sunday 12 AM 
everyday 12 AM 
every day 12:15 AM 
daily 12:01 AM 
daily 12:01 AM 

joinScreenCancellationScheduler - Weekly Sunday 12 AM 
0 0 * * 7 curl <url> 
goLiveDate - everyday 12 AM 
0 0 * * * curl <url> 
nearestDateDisable - every day 12:15 AM 
15 0 * * * curl <url> 
reminderOfEvent - daily 12:01 AM 
01 0 * * * curl <url> 
thresholdNotMet - daily 12:01 AM 
daily 12:01 AM 

Antwort

1
  • gegen einen von mehreren möglichen Werten zu entsprechen, eine terms query verwenden. Sie benötigen keine match_phrase Abfrage, weil Sie keine Art von Freitextabgleich durchführen.

  • Sie müssen die kommagetrennten Werte in Arrays aufteilen, bevor Sie Ihre Daten in Elasticsearch indizieren (oder verwenden Sie ein durch Kommas getrenntes tokenizer).

  • Ihr Anwendungsfall deutet darauf hin, dass Sie sich nicht um Scoring kümmern, sondern nur über Filterung, in welchem ​​Fall Ihre Abfrage wahrscheinlich nur einen Filter haben sollte.

  • Sortierung ist nicht dasselbe wie Filterung; Für die Sortierung A-Z/Z-A/Datum müssen Sie eine sort-Klausel außerhalb der Abfrage verwenden.

Das letzte, was würde wohl so aussehen:

GET /my_index/my_type/_search 
{ 
    "query": { 
    "bool": { 
     "filter": [ 
     "terms": { "genre": ["Action", "Drama", "Comedy"] }, 
     "terms": { "language": ["English", "Russian", "Hindi"] }, 
     // more terms filters 
     ] 
    } 
    }, 
    "sort": { "title": "asc" } 
} 
Verwandte Themen