elasticsearch的匹配与排序问题

来源:互联网 发布:windows加域脚本 编辑:程序博客网 时间:2024/06/07 05:30

后台搜索使用的java api

public List<Team> searchQueryTeam(String term, int limit, int offset, int isHighlight, long seed) throws Exception {        final List<Team> list = new ArrayList<Team>();        SearchRequestBuilder srbTeam = client.prepareSearch(INDEX_NAME)                .setTypes("Team")                .setSearchType(SearchType.DEFAULT);        if (StringUtils.isNotEmpty(term)) {            BoolQueryBuilder qbTeam = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("rowState", 0))                    .mustNot(QueryBuilders.termQuery("status", 1));            qbTeam.must(QueryBuilders                    .boolQuery()                    .should(QueryBuilders.wildcardQuery("name", "*" + term + "*").boost(10f))                    .should(QueryBuilders.fuzzyLikeThisQuery("name", "description", "tag").analyzer("ik")                            .likeText(term)).boost(0.1f));            srbTeam.setQuery(qbTeam);        }        ……

当term是10时,在head里复制了上面程序生成的语句

{  "from" : 0,  "size" : 10,  "query" : {    "bool" : {      "must" : [ {        "term" : {          "rowState" : 0        }      }, {        "bool" : {          "should" : [ {            "wildcard" : {              "name" : {                "wildcard" : "*10*",                "boost" : 10.0              }            }          }, {            "flt" : {              "fields" : [ "name", "tag","description" ],              "like_text" : "10",              "analyzer" : "ik"            }          } ],          "boost" : 0.1        }      } ],      "must_not" : {        "term" : {          "status" : 1        }      }    }  }}

查询的结果

 hits: {       total: 2       max_score: 0.9193326       hits: [           {           _index: tmwk           _type: Team           _id: 309           _score: 0.9193326           _source: {                   createDate: 2014-12-11 15:41:25                   rowState: 0                   id: 309                   name: 产品研发团队                   description: 产品研发团队是公司的重中之重,所有产品的源头来源于需求                   status: 0                   tag: 19, 17, 狗, 18, 15, 四六级, 我的                   projectCount: 0                   userCount: 0                   role: null                   lastModifiedDate: 2014-12-24 16:26:38                   }          }          {          _index: tmwk          _type: Team          _id: 270          _score: 0.90041924          _source: {                   createDate: 2014-11-21 17:00:09                   rowState: 0                   id: 270                   name: 10101010                   description: sddd四六级额哦如萨拉杜甫,算法链接偶萨拉非。三等奖哦额乳酸代理费见,斯蒂芬就咯额ulsdjfsd。                   status: 0                   tag: 牛逼, 埃菲尔, 英国, 乒乓, 自行车, 天鹅                   projectCount: 0                   userCount: 0                   role: null                   lastModifiedDate: 2014-11-21 17:00:09                   }          }       ]}

建索引前,先设置了mapping,对name字段不做分词,其他的字段analyzer都设置为ik,不明白查询关键词是10时,为何会匹配到tag: 19, 17, 狗, 18, 15, 四六级, 我的 这条,而且排名第一,程序里设置的boost也完全没生效,请问如何能做到准确匹配跟使模糊查询结果排到后面

0 0
原创粉丝点击