我正在使用Elasticsearch 6.3.0版。我想同时使用模糊度和多重匹配。但这是没有选择的。有人可以给我解决方案吗?提前致谢 查询:
{ "query": {
"bool": {
"must": [
{"function_score": {
"query": {
"multi_match": {
"query": "local",
"fields": [
"user.name^3",
"main_product"
],
"type": "phrase"
}
}
}}
],
"filter": {
"geo_distance": {
"distance": "1000km",
"user.geolocation": {
"lat": 25.55,
"lon": -84.44
}
}
}
}
} }
答案 0 :(得分:2)
查看现有查询,您正在寻找
的组合如果不是phrase_match
,则只需在现有查询中添加"fuzziness": "AUTO"
或"fuzziness":1 or whatever number based on your requirement
即可获得所需的内容。
POST <your_index_name>/_search
{
"query":{
"bool":{
"must":[
{
"function_score":{
"query":{
"multi_match":{
"query":"local",
"fields":[
"user.name^3",
"main_product"
],
"fuzziness":"AUTO"
}
}
}
}
],
"filter":{
"geo_distance":{
"distance":"1000km",
"user.geolocation":{
"lat":25.55,
"lon":-84.44
}
}
}
}
}
}
在这种情况下,您需要使用Span Queries
为了简单起见,我放弃了过滤部分,并提出了以下查询。假设我正在搜索名为pearl jam
的短语。
POST <your_index_name>/_search
{
"query":{
"function_score":{
"query":{
"bool":{
"should":[
{
"bool":{
"boost":3,
"must":[
{
"span_near":{
"clauses":[
{
"span_multi":{
"match":{
"fuzzy":{
"user.name":"pearl"
}
}
}
},
{
"span_multi":{
"match":{
"fuzzy":{
"user.name":"jam"
}
}
}
}
],
"slop":0,
"in_order":true
}
}
]
}
},
{
"bool":{
"boost":1,
"must":[
{
"span_near":{
"clauses":[
{
"span_multi":{
"match":{
"fuzzy":{
"main_product":"pearl"
}
}
}
},
{
"span_multi":{
"match":{
"fuzzy":{
"main_product":"jam"
}
}
}
}
],
"slop":0,
"in_order":true
}
}
]
}
}
]
}
}
}
}
}
因此,我正在基于模糊匹配的多字段词组中的字段执行增强操作,该词组称为pearl jam
。
具有slop: 0
和in_order:true
将使我能够对从句中指定的单词进行词组匹配。
让我知道您是否有任何疑问。
答案 1 :(得分:0)
什么使您认为多重匹配查询上没有模糊性的选择?
例如,使用以下数据:
http://localhost:9200/question_1/doc/_bulk
{"index":{}}
{"name" : "John Lazy", "text": "lazzi"}
{"index":{}}
{"name" : "John Lassi", "text": "lasso"}
{"index":{}}
{"name" : "Joan Labbe", "text": "lazzy"}
此查询:
http://localhost:9200/question_1/_search
{
"query": {
"multi_match" : {
"query" : "lazi",
"fields" : [ "name", "text" ],
"fuzziness": 1
}
}
}
然后我得到一个结果,但是如果将fuzziness
参数更改为2
,我将得到三个结果。