elasticsearch 查询

  • Python代码中动态修改可查询的最大term数
es_url = [{"host": config.get("search_es", "host"), "port": config.get("search_es", "port")}]
es = Elasticsearch(es_url) 
es.indices.put_settings(index="product", body={"index": {"max_result_window": count}})  #count就是要设置最多可以返回的查询条数 默认是10000,如果不设置,直接设定size大于10000,将会报错
  • 查询es所有的items
search_all = es.search(index="product", doc_type="product",
                   body={"size": count, "query": {"match_all": {}}})   # count是自定义的要查询的条数
  • 利用每个产品名称和其他公司中的产品名称做精确匹配
### 'should' 是对字段“主营构成”和“主营产品详细”做'or'的匹配,'must_not'指的是‘不能有’; 'size'设置要查询的数目
search_result = es.search(index="product", doc_type="product",
                       body={"query": {"bool":
                                      {"should": [{"match_phrase": {"主营构成": product_item}},
                                                  {"match_phrase": {"主营产品详细": product_item}}],
                                                   "must_not": {"match_phrase": {"code": code}}}},
                                                   "size": most_like})   
  • term filter查询
search_result2 = es.search(index="product", doc_type="product",
                                       body={"size": 20,
                                             "query": {"constant_score": {"filter": {"terms": {"主营构成": list(related_ind)}}}}})   #返回结果只是有零星几个字眼匹配上了
  • should条件中可以设置至少匹配的项目(如果同时有must条件,则should中的条件可以没有匹配到,但是如果只有should那么就要至少匹配到其中的一项)
GET /forum/article/_search
{
  "query": {
    "bool": {
      "should": [
        { "match": { "title": "java" }},
        { "match": { "title": "elasticsearch"   }},
        { "match": { "title": "hadoop"   }},
        { "match": { "title": "spark"   }}
      ],
      "minimum_should_match": 3 
    }
  }
}
  • 搜索标题中包含java和elasticsearch的blog

搜索结果精准控制的第一步:灵活使用and关键字,如果你是希望所有的搜索关键字都要匹配的,那么就用and,可以实现单纯match query无法实现的效果

GET /forum/article/_search
{
    "query": {
        "match": {
            "title": {
        "query": "java elasticsearch",
        "operator": "and"
           }
        }
    }
}
  • python程序中设置打印es log信息, 便于debug
import logging
logger = logging.getLogger('elasticsearch')
logger.setLevel(logging.WARNING)

你可能感兴趣的:(elasticsearch 查询)