我想从 cloudsearch 中检索所有可搜索的文档
我试图做一个这样的否定搜索:
search-[mySearchEndPoint].cloudsearch.amazonaws.com/2011-02-01/search?bq=(not keywords: '!!!testtest!!!')
它可以工作,但它也会返回所有已删除的文档。
那么我怎样才能只获取所有活动文档呢?
我想从 cloudsearch 中检索所有可搜索的文档
我试图做一个这样的否定搜索:
search-[mySearchEndPoint].cloudsearch.amazonaws.com/2011-02-01/search?bq=(not keywords: '!!!testtest!!!')
它可以工作,但它也会返回所有已删除的文档。
那么我怎样才能只获取所有活动文档呢?
要知道的关键是 CloudSearch 并没有真正删除。相反,“删除”函数会在索引中保留 ID,但会清除那些已删除文档中的所有字段,包括将 uint 字段设置为 0。这适用于正查询,它将不匹配已清除的“已删除”文档中的任何文本。
一种解决方法是在您的文档中添加一个 uint 字段,在下面称为“更新”,用作可能返回已删除 ID 的查询的过滤器,例如否定查询。
(下面的示例使用CloudSearch 的 Boto 接口库,为简洁起见省略了许多步骤。)
添加文档时,将字段设置为当前时间戳
doc['updated'] = now_utc # unix time in seconds; useful for 'version' also.
doc_service.add(id, now_utc, doc)
conn.commit()
当您删除时,CloudSearch 会将 uint 字段设置为 0:
doc_service.delete(id, now_utc)
conn.commit()
# CloudSearch sets doc's 'updated' field = 0
现在,您可以在否定查询中区分已删除文档和活动文档。下面的示例正在搜索包含 86 个文档的测试索引,其中大约一半被删除。
# negative query that shows both active and deleted IDs
neg_query = "title:'-foobar'"
results = search_service.search(bq=neg_query)
results.hits # 86 docs in a test index
# deleted items
deleted_query = "updated:0"
results = search_service.search(bq=deleted_query)
results.hits # 46 of them have been deleted
# negative, filtered query that lists only active
filtered_query = "(and updated:1.. title:'-foobar')"
results = search_service.search(bq=filtered_query)
results.hits # 40 active docs
我认为你可以这样做:
search-[mySearchEndPoint].cloudsearch.amazonaws.com/2011-02-01/search?bq=-impossibleTermToSearch
注意术语开头的“-”