【发布时间】:2017-02-01 12:05:59
【问题描述】:
我在我的 Spring Boot 应用程序中使用 Elasticsearch 2.4.3 并使用以下查询
QueryBuilder qb = new BoolQueryBuilder()
.must(QueryBuilders.multiMatchQuery(term, "phoneticFirstName", "phoneticLastName", "phoneticLocationName", "phoneticCompanyName")
.analyzer("atsCustomSearchAnalyzer")
.operator(Operator.AND))
.must(QueryBuilders.multiMatchQuery(term, "ngramFirstName^3", "ngramLastName^3", "ngramLocationName^3", "ngramCompanyName^3", "_all")
.analyzer("atsCustomSearchAnalyzer")
.operator(Operator.AND));
我想在第一个查询或第二个查询被命中的地方得到一个响应....你能帮我在我的代码中更改它吗?
更新
"atsCustomPhoneticAnalyzer":{
"type":"custom",
"tokenizer":"whitespace",
"filter":["lowercase","asciifolding","atsPhoneticFilter"]
},
"atsCustomSearchAnalyzer":{
"type":"custom",
"tokenizer":"whitespace",
"filter":["lowercase","asciifolding","umlautStemmer","germanStemmer"]
}
更新 #2
QueryBuilder qb = new BoolQueryBuilder()
.should(QueryBuilders.multiMatchQuery(term, "ngramFirstName", "ngramLastName", "ngramLocationName", "ngramCompanyName")
.type(Type.CROSS_FIELDS)
.analyzer("atsCustomSearchAnalyzer")
.operator(Operator.AND)
.boost(3))
.should(QueryBuilders.multiMatchQuery(term, "phoneticLastName")
.analyzer("atsCustomPhoneticAnalyzer")
.operator(Operator.AND))
.should(QueryBuilders.matchQuery(term, "_all")
.analyzer("atsCustomSearchAnalyzer")
.operator(Operator.AND))
.minimumNumberShouldMatch(1);
我有 2 个指标:人员和活动。当我注释掉第二个查询时,我会从人员和活动中获得 Hits。如果所有 3 个查询都存在,则活动的命中不再存在....
有什么想法吗?
【问题讨论】:
-
将
must改为should并添加minimumShouldMatch(1) -
感谢 Val,它有效!但是我的 Koelnerphonetic Query 不起作用:(它处理诸如“Mayer / Maier / Meyer / Meier”之类的事情,并说这些听起来是一样的......在我的问题中,我已经为此更新了我的映射/设置
-
好的,nvm .....我只是在第一个查询中使用了错误的分析器
标签: java elasticsearch boolean