2016-07-08 4 views
0

탄성 찾기에 매우 복잡한 쿼리를 작성해야합니다.탄성 검색의 잘못된 쿼리

쿼리 문자열, query에 저장되고, 아이디어는 필드 titlecontent에 "BOOL"경기를 할 수 있지만, 다음과 같은 "자바"또는 "파이썬"로 단어에 특별한 무게를 제공하는 것입니다. 이 일에

내 시도는

{ 
    "fields": ["title","content","id"], 
    "query": { 
     "function_score": { 
     "query": 
     { 
       "bool": 
       { 
        "should": 
        [ 
         {"match": {"title": {"query": query, "boost": 15}}}, 
         {"match": {"content": {"query": query, "boost": 9}}} 
        ] 
       } 
      } 
     }, 
     "functions": [ 
      { 
      "filter": { 
       "match": { 
       "title": "java" 
      }}, 
      "weight": 2 }, 
      { 
      "filter": { 
       "match": { 
       "title": "python" 
      }}, 
      "weight": 2 } 
     ], 
     "boost_mode": "multiply" 
     } 
} 

입니다하지만 쿼리가 잘못되었습니다 없다는 오류 메시지가 표시됩니다. 이 질문이 순진한 질문이라면 유감이지만, 어디서 돌아야할지 모르겠다.

답변

0

이 시도 :

{ 
    "fields": [ 
    "title", 
    "content", 
    "id" 
    ], 
    "query": { 
    "function_score": { 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "match": { 
       "title": { 
        "query": query, 
        "boost": 15 
       } 
       } 
      }, 
      { 
       "match": { 
       "content": { 
        "query": query, 
        "boost": 9 
       } 
       } 
      } 
      ] 
     } 
     }, 
     "functions": [ 
     { 
      "filter": { 
      "match": { 
       "title": "java" 
      } 
      }, 
      "weight": 2 
     }, 
     { 
      "filter": { 
      "match": { 
       "title": "python" 
      } 
      }, 
      "weight": 2 
     } 
     ], 
     "boost_mode": "multiply" 
    } 
    } 
} 
+0

당신을 감사합니다! 이 쿼리는 실제로 작동합니다. – Brian

+0

필터 (예 : "필터": [])를 사용하지 않으면 동일한 결과를 얻지 만 일반 쿼리에서 "bool"아래의 부품을 사용할 때 다른 점수를 얻습니다. 왜 그런지 알아? – Brian

+0

음, 물론, 그 필터의 요지입니다. 쿼리와 일치하는 문서에서 특정 함수 (경우에 따라 'weight' 함수)에 따라 필터와 일치하는 문서의 점수가 달라집니다. ''boost_mode ':''곱하기''와'weight : 2'는'title'이'java' 또는'python'과 일치 함을 의미합니다. –