>

Elasticsearch를 처음 접했으므로 여기에 내 질문이 있습니다. elasticsearch로 검색어를 만들고 여러 용어로 필터링하고 싶습니다.

'tom'사용자를 검색하려면 'isActive = 1', 'isPrivate = 0'및 'isOwner = 1'인 모든 일치 항목을 원합니다.

다음은 검색어입니다

"query":{
    "filtered": {
        "query": {
            "query_string": {
                "query":"*tom*",
                "default_operator": "OR",
                "fields": ["username"]
            }
        },
        "filter": {
            "term": { 
                "isActive": "1",
                "isPrivate": "0",
                "isOwner": "1"
            }
        }
    }
}  

2 개의 용어를 사용하면 매력처럼 작동하지만 3 개의 용어를 사용하면 그렇지 않습니다.

도움을 주셔서 감사합니다 !!


  • 답변 # 1

    bool filter 를 사용해야합니다   AND 로  모든 용어 :

    "query":{
        "filtered": {
            "query": {
                "query_string": {
                    "query":"*tom*",
                    "default_operator": "OR",
                    "fields": ["username"]
                }
            },
            "filter": {
                "bool" : {
                    "must" : [
                        {"term" : { "isActive" : "1" } },
                        {"term" : { "isPrivate" : "0" } },
                        {"term" : { "isOwner" : "1" } }
                    ]
                 }
             }
         }
    }  
    
    

  • 답변 # 2

    의견 중 하나에 따르면 최근 ES 버전에서 구문이 변경되었습니다.Elasticsearch 6. +를 사용하고 있고 쿼리에서 와일드 카드와 일련의 용어 (예 : 질문)를 사용하려는 경우 다음과 같이 사용할 수 있습니다.

    GET your_index/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "wildcard": {
                "your_field_name_1": {
                  "value": "tom*"
                }
              }
            },
            {
              "term": {
                "your_field_name_2": {
                  "value": "US"
                }
              }
            },
            {
              "term": {
                "your_field_name_3": {
                  "value": "Michigan"
                }
              }
            },
            {
              "term": {
                "your_field_name_4": {
                  "value": "0"
                }
              }
            }
          ]
        }
      }
    }
    
    

    와일드 카드 쿼리에 관한 문서에서 :

    와이즈 비즈

    이것이 도움이되기를 바랍니다.

    Note that this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow wildcard queries, a wildcard term should not start with one of the wildcards * or ?.

  • 이전 javascript - '와 "보다 많은 따옴표를 사용할 수 있습니까?
  • 다음 go - Golang 모듈, 개인 저장소 및 경로