一些背景知识:我打算将MongoDB用作我的一些网站的发布前端数据库。实际数据将保存在SQL Server数据库中,并且将有预定时间间隔填充MongoDB的后台作业,以便提高网站性能。
情况:我有一个表'x',我翻译成一个mongo集合,一切正常。
'x'在源数据库中有一个最初为NVARCHAR(MAX)的列'c',并且其中包含多语言文本。
当我按列'c'搜索时,mongo正在对集合进行全扫描。
所以我尝试了一个有效的ensureIndex({c:1}),但当我检查mongodb日志时,它向我显示90%的数据无法索引为[Key Too Large To Index] !!
因此已经将10%的数据编入索引,现在仅从10%的数据中返回结果!!
我有什么选择?
注意:我正在使用此专栏在SQL Server中进行全文搜索,现在我不确定是否应该继续使用Mongo :(
答案 0 :(得分:24)
尝试使用此参数运行mongod进程:
sudo mongod --setParameter failIndexKeyTooLong=false
然后再试一次。
答案 1 :(得分:0)
由于您可以进行一些细化,您可以提取一些关键词并将它们放在一个字段中:
_keywords : [ "mongodb" , "full search" , "nosql" ]
并为此制作索引。
答案 2 :(得分:0)
如果你需要在一个大字符串中搜索文本,你可以使用其中一个:
keyword splitting
regular expression
前者的缺点是你需要一些“逻辑”来组合关键词来进行搜索,后者会严重影响性能。
可能如果你真的需要全文搜索,最好的选择是使用像solr或lucene这样的外部索引器。
答案 3 :(得分:0)
它不是为此而设计的。是的,很明显,对于长字符串值,索引会出现错误键太大。
如果主要关注的是搜索,那么更好的方法是使用全文搜索服务器(solr / lucene或sphinx)。
答案 4 :(得分:0)
最近( 2.4及以上)MongoDB版本提供了其他几个选项:
text
index。hashed
index。