我的目标是在MongoDB中创建一个搜索管道,返回多个字段的结果。
我的索引:
{
"analyzer": "lucene.standard",
"searchAnalyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"description": {
"analyzer": "lucene.standard",
"type": "string"
},
"name": {
"type": "string"
}
}
}
}
我的$search
管道阶段:
{
$search: {
index: 'lucene.standard',
queryString: {
defaultPath: 'name',
query: `name:"${query}" OR description:"${query}"`,
},
}
}
这是有效的,但仅当我搜索完整单词时。例如,如果具有描述为fooBar
的文档。我的问题是,如果我查询foo
-我得到没有结果。仅当我查询完整单词fooBar
时才有效。
我该如何解决这个问题——也许是使用另一个索引定义?
以前的解决方案对您有效吗?如文件中所定义:
自动完成运算符执行搜索包含不完整输入字符串中的一系列字符。
{
"analyzer": "lucene.standard",
"searchAnalyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"description": {
"type": "autocomplete"
},
"name": {
"type": "autocomplete"
}
}
}
}
你的搜索阶段也有点偏离。也许试试复合运算符:
{
$search: {
"compound": {
"should": [{
"autocomplete": {
"query": "foo",
"path": "name"
},
"autocomplete": {
"query": "foo",
"path": "description"
}
}]
}
}
}