有没有办法在 MongoDB 的搜索索引中包含 Int32 字段使用 Atlas Search?

问题描述

我在 Mongo Atlas 数据库中有一个集合,其中有一个搜索索引,其中包括一些特定的字符串字段。我想要做的是在此搜索索引中包含一个 Int32 字段,以便能够对这个数字以及其他字段进行搜索。我尝试将字段 (Number) 添加搜索索引中的新字段,类型为编号,但不起作用。我想这是因为它将查询字符串与 Int32 进行比较,但是有没有办法让它工作?或者我是否必须复制另一个字段“NumberString”中的“Number”以包含在搜索索引中?

以下是这些文档之一的示例:

{
  “_id” : ObjectId(“010000000000000000000003”),“Description” : {
    “fr-CA” : “Un lot de test”,“en-CA” : “A test item”
  },“Name” : {
    “fr-CA” : “Lot de test”,“en-CA” : “Test item”
  },“Number” : 345,“Partners” : [],[...]
}

索引:

{
“mappings”: {
  “dynamic”: false,“fields”: {
    “Description”: {
      “fields”: {
        “en-CA”: {
          “analyzer”: “lucene.english”,“searchAnalyzer”: “lucene.english”,“type”: “string”
        },“fr-CA”: {
          “analyzer”: “lucene.french”,“searchAnalyzer”: “lucene.french”,“type”: “string”
        }
      },“type”: “document”
    },“Name”: {
      “fields”: {
        “en-CA”: {
          “analyzer”: “lucene.english”,“Number”:
      {
      “representation”: “int64”,“type”: “number”
      },“Partners”: {
      “fields”: {
        “Name”: {
          “type”: “string”
        }
      },“type”: “document”
}}}}

最后是我尝试做的查询

db.[myDB].aggregate([{ $search: { "index": "default","text": { "query": "345","path": ["Number","Name.fr-CA","Description.fr-CA","Partners.Name"]}}}])

对于本示例,我希望将查询应用于编号、名称、描述和合作伙伴,并返回匹配的所有内容。我希望有项目 #345,但也有名称或描述中包含 345 的任何项目。可能吗?

谢谢!

解决方法

使用您当前的数据类型,您应该能够在文本中搜索 #345。但是,我会像这样构造查询,以支持数字字段:

  db.[myDB].aggregate([
    { 
      $search: { 
        "index": "default","compound": {
          "should":[
            {
              "text": { 
                "query": "345","path": ["Name.fr-CA","Description.fr-CA","Partners.Name"] 
              }
            },{
              "near": { 
                "origin": 345,"path": "Number","pivot": 2
              }
            }
          ]
        } 
      } 
    }
  ])

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...