我正在构建一个商业搜索引擎,以搜索基于用户输入的查询的商业联系详细信息。业务信息以下列形式存储在elasticsearch索引中:
"_source" : {
"id" : 53,
"name" : "Judge Pouros",
"email" : "roob.alberto@example.com",
"phone" : "+1-783-850-2127",
"created_at" : "02/10/2019 16:30",
"updated_at" : "02/10/2019 16:30",
"travel_agencies" : [
{
"id" : 1234,
"abta" : "A1234",
"name" : "The Example Travel Agency",
"address_id" : 27,
"email" : "zwillms@example.info",
"comm_rate" : 14.0,
"travel_agency_type_id" : 1,
"address" : {
"id" : 27,
"line_1" : "Flat 52",
"line_2" : "Flat 82i\nKaren Circles",
"town" : "Kimberlyside",
"county" : "Renfrewshire",
"country_id" : 189,
"postcode" : "SM3 9QR",
"created_at" : "2019-10-02 16:31:01",
"updated_at" : "2019-10-02 16:31:01",
"country" : {
"id" : 189,
"code" : "MF",
"name" : "Saint Martin (French part)",
"translations" : [
{
"id" : 189,
"locale" : "en",
"country_id" : 189,
"name" : "Saint Martin (French part)"
}
]
}
}
}比方说,一位顾客在寻找“伦弗雷郡旅行的例子”。我预计会把上述结果交回。我正在使用以下查询字符串:
{
"query": {
"query_string": {
"query": "*example*travel*renfrewshire*"
}
}
}但没有任何结果被退回。我要做的是查找包含用户查询中带有模糊性的术语的文档,以允许错误删除。
我曾经考虑过用模糊度来匹配特定的术语,但是我不知道用户查询哪些术语可能匹配,所以我需要检查所有的术语。
是否有一个更简单的查询可以做到这一点?
发布于 2019-10-03 08:50:37
由于您想搜索整个文档,我建议使用多匹配查询。
这将对提供的字段执行全文搜索。
您的查询如下所示:
{
"query": {
"multi_match" : {
"query" : "example travel renfrewshire",
"fields" : [ * ]
}
}
}您还可以在match/match查询上定义模糊性。
请看一下这方面的模糊性文献。
编辑:
如文件所述:
如果没有提供任何字段,则multi_match查询默认为index.query.default_field索引设置,而后者则默认为*。*提取映射中有资格进行术语查询的所有字段,并过滤元数据字段。然后将所有提取的字段组合起来构建一个查询。
您甚至不必定义字段设置,因为它默认为*(所有符合条件)。
https://stackoverflow.com/questions/58215223
复制相似问题