【问题标题】:Elasticsearch OR queryElasticsearch OR 查询
【发布时间】:2015-05-07 11:37:18
【问题描述】:

谁能告诉我如何在 elastisearch 中编写下面的 Mysql 查询

Select * from `table` WHERE `Name`='A' OR `Name`='B' order by `rank` DESC

我尝试了多种互联网解决方案,例如

{

"sort":{"rank":{"order":"desc"}}, 

"query": {

    "query_string" : {
        "fields" : ["Name"],
        "query" : "A OR B"
    }


}

也尝试了下面的代码

{

"sort":{"rank":{"order":"desc"}}, 

  "query" : {
    "bool": {
      "should": [
        {
          "match_phrase" : {
            "Name" : "A"
          }
        },
        {
          "match_phrase": {
            "Name": "B"
          }
        }
      ]

    } 
  }
}

【问题讨论】:

标签: elasticsearch elastica


【解决方案1】:

您可以对所有文档使用 Bool-Filter 和 Order:

{
  "query": {
    "match_all": {}
  },
  "filter": {
    "bool": {
      "should": [
        {
          "term": {
            "Name": "A"
          }
        },{
          "term": {
            "Name": "B"
          }
        }
      ]
    }
  },"sort": [
    {
      "rank": {
        "order": "desc"
      }
    }
  ]
}

或者有一个带有范围查询的子集:

"query": {
    "range": {
      "JoinDate": {
        "lte": 1431051540
      }
    }
  }

【讨论】:

  • 您是否定义了映射?如果是,请在此处发布。您的索引文档是什么样的?
  • 你想让我在这里发布什么,你能具体点吗?
  • 谢谢。我在上一篇文章中提到过。如果您以小写形式搜索该术语(例如“名称”:“b”)怎么办?您的输入看起来如何,或者您能否举一个您已编入索引的文档的示例?
  • 谢谢。小写的东西完美无缺,但我怎样才能将"range" : { "JoinDate" : { "lte": "1431051540" } } } 添加到查询中?
  • 请看一下,我编辑了之前的帖子。您可以像第二个示例一样更改整个查询。
【解决方案2】:

这是我当前的映射是

{
    "class": {
        "mappings": {
            "students": {
                "properties": {
                    "Name": {
                        "type": "string"
                    },
                    "rank": {
                        "type": "string"
                    },
                    "Description": {
                        "type": "string"
                    },
                    "Image": {
                        "type": "string"
                    },
                    "JoinDate": {
                        "type": "date",
                        "format": "dateOptionalTime"
                    }
                }
            }
        }
    }
}

【讨论】:

    【解决方案3】:

    试试Terms filter。下面是您编写的 SQL 查询的等价物。

    curl -XGET 'http://localhost:9200/_search?pretty' -d '{
        "filter": {
            "terms": {
                "Name": ["A", "B"]
            }
        },
        "sort": {
            "rank": {
                "order": "desc"
            }
        }
    }'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      • 2021-12-02
      • 2018-06-03
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多