我正在构建一个商业搜索引擎,以根据用户输入的查询搜索商业联系方式。企业信息以下列形式存储在弹性搜索索引中:
"_source" : {
"id" : 53,
"name" : "Judge Pouros",
"email" : "[email protected]",
"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" : "[email protected]",
"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)"
}
]
}
}
}
假设客户正在搜索“example travel renfrewshire”。我希望返回上述结果。我目前使用以下查询字符串:
{
"query": {
"query_string": {
"query": "*example*travel*renfrewshire*"
}
}
}
但是没有返回任何结果。我正在尝试做的是查找包含用户查询中的术语的文档,并且模糊不清以允许拼写错误。
我曾考虑过对特定术语进行模糊匹配,但我不知道用户查询的哪些术语可能匹配,因此我需要检查所有术语。
是否有一个更简单的查询可以做到这一点?
由于您想搜索整个文档,我建议使用multi match query。
这将对提供的字段执行全文搜索。
您的查询将如下所示:
{
"query": {
"multi_match" : {
"query" : "example travel renfrewshire",
"fields" : [ * ]
}
}
}
您还可以在 match/multi_match 查询上定义模糊性。
看一看模糊文档。
编辑:
如文档中所述:
如果未提供字段,则 multi_match 查询默认为 index.query.default_field 索引设置,而后者默认为 *。* 提取映射中符合术语查询条件的所有字段并过滤元数据字段。然后组合所有提取的字段以构建查询。
您甚至不必定义字段设置,因为它默认为 * (全部符合条件)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句