查询 MongoDB Atlas 全文搜索中的词子集
Query for sub-set of word in MongoDB Atlas full text search
我的objective是创建一个索引+搜索管道,所以我通过搜索“reprod”可以找到以下文档:
{ name: "can you find this and reproduce?" }
我有什么:
我正在使用默认索引。
我的搜索管道如下所示:
$search: {
text: {
query: 'reprod',
path: 'name',
},
},
但这不起作用 - 只有在查询中提供整个单词时,我才能得到完整的结果。我希望文档被退回,即使我只提供了一个单词的子集。
如果您可以更改索引定义,我建议您使用 autocomplete operator,但您使用此运算符查询的字段目前要求它们在索引定义中静态定义。对于此示例,您的索引定义可能如下所示:
{
"mappings": {
"dynamic": false,
"fields": {
"name": {
"type": "autocomplete"
}
}
}
}
然后您的查询将如下所示:
{
$search: {
"autocomplete": {
"path": "name",
"query": "reprod"
}
}
}
如果您不想要静态定义的索引定义,您可以使用 Wildcard Operator 而不是 Allow Analyzed Field
设置为 true
。
我的objective是创建一个索引+搜索管道,所以我通过搜索“reprod”可以找到以下文档:
{ name: "can you find this and reproduce?" }
我有什么:
我正在使用默认索引。 我的搜索管道如下所示:
$search: {
text: {
query: 'reprod',
path: 'name',
},
},
但这不起作用 - 只有在查询中提供整个单词时,我才能得到完整的结果。我希望文档被退回,即使我只提供了一个单词的子集。
如果您可以更改索引定义,我建议您使用 autocomplete operator,但您使用此运算符查询的字段目前要求它们在索引定义中静态定义。对于此示例,您的索引定义可能如下所示:
{
"mappings": {
"dynamic": false,
"fields": {
"name": {
"type": "autocomplete"
}
}
}
}
然后您的查询将如下所示:
{
$search: {
"autocomplete": {
"path": "name",
"query": "reprod"
}
}
}
如果您不想要静态定义的索引定义,您可以使用 Wildcard Operator 而不是 Allow Analyzed Field
设置为 true
。