美文网首页
elasticsearch 查询

elasticsearch 查询

作者: mugtmag | 来源:发表于2019-11-24 17:25 被阅读0次
    • 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 查询

          本文链接:https://www.haomeiwen.com/subject/fsinrxtx.html