- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
示例:
{
shortName: "KITT",
longName: "Knight Industries Two Thousand",
fromZeroToSixty: 2,
year: 1982,
manufacturer: "Pontiac",
/* 25 more fields */
}
这让我想知 Prop 有大量可搜索字段的网站如何做到这一点:例如房地产或汽车销售网站,您可以在其中按每个小细节进行过滤,并可以在多个排序选项之间进行选择。
我如何使用 MongoDB 实现这一目标?我应该如何为这种集合建立索引?
我知道有专门用于搜索的数据库,但每个数据库都必须有一般的经验法则来执行此操作(即使性能较低)。我敢肯定不是每个人都使用 Elasticsearch 或类似的东西。
选读:
我的理由是索引可能很大,但索引顺序很重要。您将始终确保返回最少结果的字段在索引中排在第一位,而最通用的字段排在最后。但是,如果用户只选择通用字段怎么办?我是否应该包括非通用字段以进行查询?如何解决两种方式的排序?还是索引交集可以挽救局面,我应该只添加 20 个不同的索引?
最佳答案
text index
是你的 friend 。
在此处阅读:https://docs.mongodb.com/v3.2/core/index-text/
简而言之,这是一种告诉 mongodb
您想要对特定字段、多个字段或所有字段(耶!)进行全文搜索的方法
要允许对所有字段进行文本索引,请使用特殊符号 $**
,并将其定义为“文本”类型:
db.collection.createIndex( { "$**": "text" } )
您还可以使用 Case Insensitivity
或 Diacritic Insensitivity
等配置它。
要使用索引执行文本搜索,请使用 $text
查询助手,请参阅:https://docs.mongodb.com/v3.2/reference/operator/query/text/#op._S_text
更新:
为了允许用户选择特定字段进行搜索,可以在创建文本索引时使用权重:https://docs.mongodb.com/v3.2/core/index-text/#specify-weights如果您仔细选择字段的权重,例如仅使用不同的质数,然后添加 $meta您可以从“textScore”中找出与此查询匹配的字段,然后过滤掉未从所选搜索字段中获得命中的结果。
在这里阅读更多:https://docs.mongodb.com/v3.2/tutorial/control-results-of-text-search/
关于mongodb - 广泛的过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40791345/
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我是一名优秀的程序员,十分优秀!