搜索与输入文本的 x % 匹配 match_query 的字段
Search for a field which matches x % of input text with match_query
我正在使用 match_query
ElasticSearch,我遇到了标题中描述的问题。
字段名称:project.name
其映射:
"project": {
"properties": {
"name": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
},
"owner": {
"type": "string",
"index": "not_analyzed"
}
}
}
例如用户要搜索项目名称:the ranger 1
数据库中只有project.name
= the ranger
project.name
仅匹配 3 个字词(the
、ranger
和 1
)
有什么方法可以搜索 project.name
字段至少匹配查询字符串 60% 的所有文档?
TLDR:您可以在匹配查询中使用 minimum_should_match。
匹配查询是布尔类型。这意味着对提供的文本进行了分析,分析过程根据提供的文本构造了一个布尔查询。运算符标志可以设置为 or
或 and
来控制布尔子句(默认为 or
)。可以使用 minimum_should_match 参数设置要匹配的可选 should 子句的最小数量。可以设置分析器来控制哪个分析器将对文本执行分析过程。它默认为字段显式映射定义,或默认搜索分析器。
{
"query": {
"match": {
"project.name": {
"query": "the ranger 1",
"minimum_should_match": "2"
}
}
}
}
您还可以指定百分比和一些条件。看这里:
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html
我正在使用 match_query
ElasticSearch,我遇到了标题中描述的问题。
字段名称:project.name
其映射:
"project": {
"properties": {
"name": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
},
"owner": {
"type": "string",
"index": "not_analyzed"
}
}
}
例如用户要搜索项目名称:
the ranger 1
数据库中只有
project.name
=the ranger
project.name
仅匹配 3 个字词(the
、ranger
和1
)
有什么方法可以搜索 project.name
字段至少匹配查询字符串 60% 的所有文档?
TLDR:您可以在匹配查询中使用 minimum_should_match。
匹配查询是布尔类型。这意味着对提供的文本进行了分析,分析过程根据提供的文本构造了一个布尔查询。运算符标志可以设置为 or
或 and
来控制布尔子句(默认为 or
)。可以使用 minimum_should_match 参数设置要匹配的可选 should 子句的最小数量。可以设置分析器来控制哪个分析器将对文本执行分析过程。它默认为字段显式映射定义,或默认搜索分析器。
{
"query": {
"match": {
"project.name": {
"query": "the ranger 1",
"minimum_should_match": "2"
}
}
}
}
您还可以指定百分比和一些条件。看这里: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html