排除MongoDB文本索引中的一些文本字段

时间:2015-08-07 15:33:54

标签: mongodb full-text-indexing nosql

我有一个像这样的文本索引的集合:

db.mycollection.createIndex({ "$**" : "text"},{ "name" : "AllTextIndex"}))

该集合的文档有许多文本数据块。我想排除其中的一些,以便得不到包含从排除的块匹配的文本的结果。

但是,我不想像下面那样定义文本索引中的每个字段,以便排除例如NotTextSearchableBlock块:

db.application.ensureIndex({
    "SearchableTextBlock1": "text",
    "SearchableTextBlock2": "text",
    "SearchableTextBlock3": "text"
})

这是一个文档示例:

{
      "_id": "e0832e2d-6fb3-47d8-af79-08628f1f0d84",
      "_class": "com.important.enterprise.acme",
      "fields": {
        "Organization": "testing"
      },
      "NotTextSearchableBlock": {
        "something": {
          "SomethingInside": {
           "Text":"no matcheable text"
          }
        }
      },
      "SearchableTextBlock1": {
        "someKey": "someTextCool"
      },
      "SearchableTextBlock2": {
        "_id": null,
        "fields": {
          "Status": "SomeText"
        }
      },
      "SearchableTextBlock3": {
        "SomeSubBlockArray": [
          {
            "someText": "Pepe"
          }
        ]
      }
}

1 个答案:

答案 0 :(得分:1)

要回答您的问题,没有记录的方法来从文本索引中排除某些字段。(请参阅mongodb文档中的Text Indexes 。)

如您所知:

建立db.mycollection.createIndex({ mystringfield : "text" mystringarray : "text" }) 索引时,您必须标识要索引的特定文本字段。该字段必须是字符串或字符串元素数组。

$**

您还可以使用通配符说明符db.mycollection.createIndex( { "$**" : "text" }, { name : "mytextindex" } ) 索引集合文档中的所有文本。

with open(filename, 'rb') as f:
    z = py7zlib.Archive7z(f)
    names = z.getnames()
    if subName in names:
        subFile = z.getmember(subName)
        contents = subFile.read()
    else:
        contents = None

return contents