2

Elasticsearchで検索したいのですが、条件が合わないのにヒットしてしまいます。例:-

     {
         tweet: [
              {
                  firstname: Lav
                  lastname: byebye
             }
             {
                   firstname: pointto
                   lastname: ihadcre
             }
             {
                   firstname: letssearch
                   lastname: sarabhai
             }
          ]
      }
    }

現在、次の条件があります:-

1) 必須:- 名: Lav 必須:- 姓: さようなら 必須: ヒットする必要があります

取得:ヒット

2) 必須:- 名: Lav 必須:- 姓: ihadcre 必須: ヒットしてはならない

取得:ヒット

問題である2番目の状態でヒットするべきではありません

手伝ってくれてありがとう

4

1 に答える 1

4

説明している動作を実現するには、ツイートをネストされたオブジェクトとしてインデックス化し、ネストされた queryまたはfilterを使用して検索する必要があります。例えば:

curl -XDELETE localhost:9200/test-idx
curl -XPUT localhost:9200/test-idx -d '{
    "settings": {
        "index.number_of_shards": 1,
        "index.number_of_replicas": 0
    },
    "mappings": {
        "doc": {
            "properties": {
                "tweet": {"type": "nested"}
            }
        }
    }
}'
curl -XPUT "localhost:9200/test-idx/doc/1" -d '{
    "tweet": [{
        "firstname": "Lav",
        "lastname": "byebye"
    }, {
        "firstname": "pointto",
        "lastname": "ihadcre"
    }, {
        "firstname": "letssearch",
        "lastname": "sarabhai"
    }]
}
'
echo
curl -XPOST "localhost:9200/test-idx/_refresh"
echo
curl "localhost:9200/test-idx/doc/_search?pretty=true" -d '{
    "query": {
        "nested" : {
            "path" : "tweet",
            "score_mode" : "avg",
            "query" : {
                "bool" : {
                    "must" : [
                        {
                            "match" : {"tweet.firstname" : "Lav"}
                        },
                        {
                            "match" : {"tweet.lastname" : "byebye"}
                        }
                    ]
                }
            }
        }
    }
}'
echo
curl "localhost:9200/test-idx/doc/_search?pretty=true" -d '{
    "query": {
        "nested" : {
            "path" : "tweet",
            "score_mode" : "avg",
            "query" : {
                "bool" : {
                    "must" : [
                        {
                            "match" : {"tweet.firstname" : "Lav"}
                        },
                        {
                            "match" : {"tweet.lastname" : "ihadcre"}
                        }
                    ]
                }
            }
        }
    }
}'
于 2013-07-03T13:36:33.627 に答える