2013-08-28 3 views
4

쿼리 문자열 쿼리을 사용하여 레코드를 가져 오려고합니다. 다음과 같이 검색을위한
내 시나리오는 다음과 같습니다
내가 좋아하는 검색 할 수 있습니다 "I Love my " AND (HTC OR Iphone OR Samsung)
그리고이 같은 결과를 기대하고있다 : 내 HTC 사랑탄성 검색 쿼리 문자열 쿼리

  • 내 아이폰 내가 사랑
  • 사랑 내 삼성

난 그냥 몇 가지 조합을 시도하지만이

작동하지 않음3210
{ 
    "query": { 
      "query_string": { 
       "default_field": "SearchContent", 
       "query": "\"I Love my\" AND (HTC OR Iphone OR Samsung)" 
      } 
     } 
} 

쿼리 문자열로 어떻게 할 수 있습니까 아니면 다른 옵션이 있습니까, 내가 붙어 있습니다. 도와주세요.

+0

조회에 올바른 보인다. mgm의 대답 (소문자)이 그럴 수 있습니다. 따라서 분석기를 확인하십시오. –

답변

0

글쎄, 네. match_all 쿼리를 기반으로 필터링 된 쿼리를 작성할 수 있습니다.이 쿼리는 사용자, 조합 및/또는 필터에 관심있는 필터를 사용합니다. 여기에서는 3 가지 구문 중 하나를 가진 문서를 반환하려고합니다. 나는 당신이 "나는 내 케이크를 사랑하고, 나는 아이폰"을 갖고 싶지 않다고 생각한다.

그래서, 그런 것 같습니다 (충분히 효율적인지, 힘든 지 모른다). 데이터가 너무 큰 경우

{ 
"filtered" : { 
    "query" : { 
     "match_all" : {} 
    }, 
    "filter" : { 
     "or" : { 
      "filters" : [{ 
        "fquery" : { 
         "query" : { 
          "query_string" : { 
           "query" : "\"I love my iphone\"", 
           "default_field" : "searchContent", 
           "default_operator" : "and" 
          } 
         } 
        } 
       },{ 
        "fquery" : { 
         "query" : { 
          "query_string" : { 
           "query" : "\"I love my htc\"", 
           "default_field" : "searchContent", 
           "default_operator" : "and" 
          } 
         } 
        } 
       }, 
       { 
        "fquery" : { 
         "query" : { 
          "query_string" : { 
           "query" : "\"I love my samsung\"", 
           "default_field" : "searchContent", 
           "default_operator" : "and" 
          } 
         } 
        } 
       } 
      ] 
     } 
    } 
} 

}

+0

답장을 보내 주셔서 감사합니다. 하지만 언급 한 고정 값이 없습니다. 쿼리 수 있습니다 아무것도 같은 : "\"나는 다양한 게시물을 통해 간으로 내 자신의 \ "AND (노트북 또는 자전거 또는 헬기)" 는, 그들이 사용하는 것이 좋습니다 이 "** 쿼리 문자열 쿼리 **" 우리가 통과 한 부울 논리로 그것을 변환하지만, 여기 나는 그 출력을 얻지 못했습니다. 감사합니다. 아니 루다 – AniPol

0

이 시도 ...

{ 
    "query": { 
      "query_string": { 
       "default_field": "SearchContent", 
       "query": "I Love my *" 

      } 
     } 
} 

와일드 카드는 확장 성이 좋지 않습니다. 그러나 성능이 주요 관심사가 아닌 경우 (데이터의 양이 적다면) 도움이 될 수 있습니다.

+1

정말 질문에 대답하지 않습니다. 그렇습니까? –

-2

아래 검색어 문자열을 사용하여 동일한 검색어를 사용할 수 있습니다.

{ 
    "query_string" : { 
     "fields" : ["content", "my_field"], 
     "query" : "\"I love my \" HTC Iphone Samsung" 

    } 
} 

시도해보십시오. 사용해보십시오. 또는 확인 : http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

+1

기본적으로 모든 용어는 OR 연결됩니다. 따라서이 검색에는 반드시 "내 사랑"이 포함되지는 않습니다. –

9

쿼리는 _mapping에 따라 다릅니다. 정의하지 않았다면 표준 분석기가 사용됩니다. 다음 그렇다면 토큰은 다음과 같습니다

  • 나는 나의 HTC 사랑 -> "I", "사랑", "내", "HTC"
  • 내가 사랑 내 아이폰 -> "I", "사랑" "나의", "아이폰"
  • 내가 내 삼성 사랑 -> "I", "사랑", "내", "삼성"

통지 토큰은 소문자입니다.

쿼리 문자열에 대한 적절한 형식은 다음과 같습니다

GET /yourindex/_search 
{ 
    "query": { 
    "query_string": { 
     "default_field": "SearchContent", 
     "query": "\"i love my\" AND (samsung OR htc OR iphone)" 
    } 
    } 
}