2017-02-19 2 views
0

Ich habe 2 Teile der Abfrage (a) Abfrage (b) Kontext, Ich möchte eine Abfrage zu elasticsearch, die geben Sie mir Ergebnisse zu (a), das ist obligatorisch, und die Ergebnisse, die (b) haben, sollten verstärkt werden. B. Wenn die Abfrage/(a) "Inflationsraten" und Kontext/(b) "Vereinigte Staaten" ist - die Ergebnisse sollten nur Ergebnisse zu "Inflationsraten" und die Ergebnisse zu "USA "sollte verstärkt werden.Elasticsearch Abfrage zu 2 verschiedenen Abfragen auf den gleichen Feldern zu suchen und Ergebnisse, die die Kombination beider Abfragen haben

Ich habe verschiedene Konzepte von elasticsearch wie - bool/sollte/filter/versucht, aber die Ergebnisse sind nicht so wie erwartet. unten gebe ich die Frage Vorlage, die ich derzeit verwende. Es gibt mir Ergebnisse, in denen Abfrage und Kontext nicht kombiniert werden, es gibt nur Dokumente, die entweder Abfrage oder Kontext entsprechen. Ich verwende ES 2.4.0

{ 
    "template":{ 
    "from":"0", 
    "size":"10", 
    "_source": ["*"], 
    "query":{ 
     "function_score": { 
     "query":{ 
      "bool":{ 
      "should":[{ 
       "match":{ 
       "display":{ 
        "query": "inflation rate", 
        "boost": 2 
       } 
       } 
      }, 
      { 
       "match":{ 
       "attributes.definition": { 
        "query": "inflation rate", 
        "boost": 5 
       } 
       } 
      }, 
      { 
       "match":{ 
       "attributes.topics.name": { 
        "query": "inflation rate", 
        "boost": 5 
       } 
       } 
      }, 
      { 
       "match":{ 
       "attributes.titles": { 
        "query": "inflation rate", 
        "boost": 7 
       } 
       } 
      }, 
      { 
       "match":{ 
       "attributes.definition": { 
        "query": "United States", 
        "boost": 4 
       } 
       } 
      }, 
      { 
       "match":{ 
       "attributes.topics.name": { 
        "query": "United States", 
        "boost": 4 
       } 
       } 
      }, 
      { 
       "match":{ 
       "attributes.titles": { 
        "query": "United States", 
        "boost": 4 
       } 
       } 
      }], 
      "must": [ 
      { 
       "match":{ 
        "type":"news" 
       } 
      }] 
      } 
     }, 
     "functions": [{ 
      "gauss": { 
      "attributes.published_ts": { 
       "scale": "10d" 
      } 
      }, 
      "weight" : 0.1 
     }] 
     } 
    } 
    } 
} 

Antwort

0

so etwas sein sollte:
z.B.

{   
    "query": { 
     "function_score": { 
      "filter": { 
       "bool": { 
        "must": [{ //here can be should, must etc ... This is your first condition. 
         "match": { 
          "attributes.definition": { 
           "query": "inflation rate", 
           "boost": 5 
          } 
         } 
        }, { 
         "match": { 
          "attributes.topics.name": { 
           "query": "inflation rate", 
           "boost": 7 
          } 
         } 
        }] 
       } 
      }, 
      "functions": [{ //This is your second condition. Just to give more relevance to the topics with United States. 
       "filter": { 
        "term": { 
         "attributes.topics.name": "United States" 
        } 
       }, 
       "weight": 3 
      }, { 
       "field_value_factor": { 
        "field": "views", 
        "modifier": "log1p" 
       } 
      }], 
      "score_mode": "sum" 
     } 
    } 
} 

ist nur ein Beispiel, passen Sie es Ihren eigenen Anforderungen.

+0

hi danke für das Beispiel, ich habe dieses Beispiel versucht, aber mit muss gibt leere Ergebnisse die meiste Zeit und selbst wenn ich sollte sollte, macht Filter keine Änderungen an den Ergebnissen – Mohit

Verwandte Themen