我最近从Postgres切换到了Solr,在查询中加速了~50倍.我们运行的查询涉及多个范围,我们的数据是车辆清单.例如:"查找里程<50,000,$ 5,000 <价格<$ 10,000,make = Mazda ......"的所有车辆
我在Postgres的所有相关专栏上创建了索引,所以它应该是一个相当公平的比较.看看Postgres中的查询计划虽然它仍然只是使用单个索引然后扫描(我假设因为它无法使用所有不同的索引).
据我了解,Postgres和Solr使用模糊相似的数据结构(B树),它们都将数据缓存在内存中.所以我想知道这么大的性能差异来自哪里.
架构有什么不同可以解释这一点?
我们所有人最近都遇到了最近对无SQL解决方案的大肆宣传.MongoDB,CouchDB,BigTable,Cassandra等已被列为无SQL选项.这是一个例子:
http://architects.dzone.com/articles/what-nosql-store-should-i-use
但是,三年前我和一个同事使用Lucene.NET似乎符合无SQL的描述.我们并没有将其用于用户输入的搜索查询; 我们使用它来使一些重新编制索引的RDBMS表数据非常高效.我们实现了自己的.NET等价于Solr服务,以管理这些索引并使它们可调用.当我离开公司时,团队切换到Solr本身.(对于那些不知情的人,Solr是一个Web服务,它使用REST可调用查询和索引转储来包装Lucene.)
我不明白的是,为什么Solr不计入典型的无SQL解决方案选项列表?我在这里错过了什么吗?我假设Solr与CouchDB等不相似的技术原因,实际上我理解CouchDB使用Lucene作为其数据存储(是吗?),但是什么使Solr失去资格?
我不是要求某种Solr粉丝或任何东西,我只是不明白为什么Solr之类的东西不符合no-SQL的定义,如果Solr在技术上确实符合定义,那么它有什么可能使得人们呸呸吗?我问,因为我很难确定是否应该继续使用基于Lucene的解决方案(如Solr)来构建我构建的解决方案,或者我是否应该对这些其他选项进行更多的研究.
我准备在Heroku上部署一个需要全文搜索的Rails应用程序.到目前为止,我一直在使用MySQL与Sphinx的VPS上运行它.
但是,如果我想在Heroku上使用Sphinx或Solr,我需要支付附加费用.
我注意到PostgreSQL(Heroku上使用的数据库)具有内置的全文搜索功能.
有没有理由我不能使用Postgres的全文搜索?它比Sphinx慢还是有其他一些主要限制?
我对索引的行为和Solr字段的存储属性有点困惑.
例如,如果我在Schema.xml中有以下内容
<field name="test1" type="text" indexed="false"
stored="false" required="false" />
Run Code Online (Sandbox Code Playgroud)
即使我在其中创建了包含该字段的文档并将值设置为该字段并将文档提交给Solr ,字段test1也不会存储在Solr文档中.因为我有这个stored=false
属性,是否意味着该字段的值在Solr中丢失而不是持久存在?
我在Jetty上运行Solr实例,当我使用Solr管理面板进行搜索时,它返回整个文档.如何从搜索返回的每个Solr文档中仅获取指定的字段?
我们需要在我们的产品目录管理软件中集成搜索引擎.该目录预计将超过4-5百万.关系数据的记录分布在几个表中.我们的开发平台是Asp.Net 3.5,我们已经对Lucene做了一些初步的工作,发现它很好.然而,我们刚刚了解了Solr并且正在寻找一些实用的技巧来比较Lucene和Solr的实现,时间表,定期维护,性能,功能.任何指导或指示都会非常有用.谢谢.
我想做相当于这个SQL,但Solr作为我的数据存储.
SELECT
DISTINCT txt
FROM
my_table;
Run Code Online (Sandbox Code Playgroud)
什么语法会迫使Solr只给我不同的值?
http://localhost:8983/solr/select?q=txt:?????&fl=txt
Run Code Online (Sandbox Code Playgroud)
编辑:如此刻面的搜索似乎很合适,但正如我调查的那样,我意识到我只有一半的问题.
我的SQL查询应该已阅读...
SELECT
DISTINCT SUBSTR(txt,0,3)
FROM
my_table;
Run Code Online (Sandbox Code Playgroud)
Solr的任何可能吗?
我的团队正在与使用Solr作为搜索索引的第三方CMS合作.我注意到,似乎作者使用Solr作为各种类型的数据库,因为返回的每个文档都包含两个字段:
所以基本上它运行对Solr的搜索,下载对象的XML表示,然后从XML实例化对象,而不是使用id在数据库中查找它.
我的直觉告诉我这是一个不好的做法.Solr是一个搜索索引,而不是一个数据库......所以对我来说更有意义的是对Solr执行复杂的搜索,获取文档ID,然后将相应的行拉出数据库.
当前的实现是否完美无缺,或者是否有数据支持这种重构成熟的想法?
编辑:当我说"XML表示"时 - 我的意思是一个存储字段,其中包含所有对象属性的XML字符串,而不是多个存储字段.
SOLR文档声明,与主查询不同,过滤查询不会影响文档分数.任何人都可以解释这是什么意思,最好是一个例子.
谢谢.