2013-03-01 9 views
6

Co jest obecnie mylące, to to, że w zapytaniu dodaję wzmocnienie do category_id z 10, które jest znacznie wyższe niż inne boosty. Przedmiot z innej kategorii, "Tai Chi", w jakiś sposób pojawia się na szczycie wyników.Zwiększenie kwerendy Bool na Elasticsearch o niewielkim efekcie

Mam mapowanie:

{ 
    "the_items": { 
    "item": { 
     "properties": { 
     "brand_id": { 
      "type": "integer" 
     }, 
     "category_id": { 
      "type": "integer" 
     }, 
     "description": { 
      "type": "multi_field", 
      "fields": { 
      "description": { 
       "type": "string", 
       "analyzer": "full_title" 
      } 
      } 
     }, 
     "title": { 
      "type": "multi_field", 
      "fields": { 
      "title": { 
       "type": "string", 
       "analyzer": "full_title" 
      }, 
      "partial_title": { 
       "type": "string", 
       "index_analyzer": "partial_title", 
       "search_analyzer": "full_title", 
       "include_in_all": false 
      } 
      } 
     }, 
     "updated_at": { 
      "type": "string" 
     } 
     } 
    } 
    } 
} 

Używam następujące zapytanie:

curl -XGET 'http://localhost:9200/austin_items/_search?pretty=true' -d '{ 
    "query": { 
    "filtered": { 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "match": { 
       "title": { 
        "boost": 2, 
        "query": "chi", 
        "type": "phrase" 
       } 
       } 
      }, 
      { 
       "match": { 
       "title.partial_title": { 
        "boost": 1, 
        "query": "chic" 
       } 
       } 
      }, 
      { 
       "match": { 
       "description": { 
        "boost": 0.2, 
        "query": "chic" 
       } 
       } 
      }, 
      { 
       "term": { 
       "category_id": { 
        "boost": 10, 
        "value": 496 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
}' 

który daje mi następujące hity:

[ 
    { 
    "_index": "the_items", 
    "_type": "item", 
    "_id": "34410", 
    "_score": 0.7510745, 
    "_source": { 
     "id": "34410", 
     "title": "Initiez-vous au Tai Chi", 
     "description": "p. Le Tai Chi est un art chevaleresque, initialement originaire de Chine, maintenant partie int\u00e9grante des tr\u00e9sors du patrimoine de l'humanit\u00e9. C'est un art de droiture, un art pour les braves, \u00e0 la recherche du geste juste et de l'attitude juste - la \"ju", 
     "brand_id": "0", 
     "category_id": "497" 
    } 
    }, 
    { 
    "_index": "the_items", 
    "_type": "item", 
    "_id": "45393", 
    "_score": 0.45193857, 
    "_source": { 
     "id": "45393", 
     "title": "Very Hot Chicken", 
     "description": "Laissez-vous tenter par la force du Very Hot Chicken Burger, avec sa sauce piment\u00e9e, ses rondelles de piment vert et sa pr\u00e9paration pan\u00e9e au poulet.\r\nAjoutez-y une tranche de chester fondu, de la salade, des tomates, le tout dans un pain parsem\u00e9 de bl\u00e9 concass\u00e9 pour un burger fort en go\u00fbt !", 
     "brand_id": "0", 
     "category_id": "496" 
    } 
    } 
] 

Gdybym zwiększyć category_id pole do czegoś głupiego jak 30, a następnie odrzuca "Tai Chi" z najlepszych wyników. Właściwie to chcę, aby "Thai Chi" pojawił się w wynikach wyszukiwania, na wypadek, gdyby nie było nic innego, ale wydaje się, że z jakiegoś powodu nieznanego mi część category_id zapytania nie działa poprawnie. Czy ktoś wie, dlaczego tak się dzieje?

+3

Czy możesz powtórzyć swoje zapytania za pomocą flagi explain = true? Pokaże, jak obliczono te wyniki. – imotov

+0

Dzięki za to, postawiłem mnie na dobrej drodze. Prawdopodobnie bardziej problem z oceną lucenu niż problem z elastycznym badaniem. Będę aktualizował, gdy będę miał dobrą odpowiedź. – unflores

Odpowiedz

7

Chciałem zmodyfikować wynik na podstawie zwiększenia, które dodałem do zapytania. Jednak wynik bierze kilka rzeczy pod uwagę nie tylko doładowania. Aby wymusić zwiększenie kategorii i marki, skorzystałem z "custom_boost_factor" i zastosowałem go jako podkwerendę przypisaną do zwykłych przypadków.

curl -XGET 'http://localhost:9200/austin_items/_search?pretty=true' -d ' 
{ 
    "query" : { 
    "filtered" : { 
     "query" : { 
     "bool" : { 
      "should" : [ 
      { "match" : { "title" : { "boost" : 2,"query" : "chi", "type":"phrase"} } }, 
      { "match" : { "title.partial_title" : { "boost" : 1,"query" : "chi"} } }, 
      { "match" : { "description" : { "boost" : 0.2,"query" : "chic"} } }, 
      { "custom_boost_factor": { 
       "query":{ 
        "bool": { 
        "must" : [ 
         { "multi_match": { "query" : "chi", "fields" : ["title", "description"] }}, 
         { "in": { "category_id": [496] } } 
        ] 
        } 
       }, 
       "boost_factor": 2 
       } 
      }, 
      { "custom_boost_factor": { 
       "query":{ 
        "bool": { 
        "must" : [ 
         { "multi_match": { "query" : "chi", "fields" : ["title", "description"] }}, 
         { "in": { "brand_id": [999] } } 
        ] 
        } 
       }, 
       "boost_factor": 3 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
}' 
Powiązane problemy