给出以下查询:
(field:value1 OR field:value2 OR field:value3 OR ... OR field:value50)
Run Code Online (Sandbox Code Playgroud)
这可以分解为更简洁的东西吗?基本上我有数百个类别ID,我需要在大类别ID(一次20-50)下搜索项目.在MySQL中,我只是使用field IN(value1, value2, value3)
而不是(field = value1 OR field = value2 etc...)
.
Solr/Lucene有更简单的方法吗?
在我正在工作的项目中,客户端有一个旧的大型(TB级)RDBMS.所有类型的查询都很慢,没有时间来修复/重构模式.我已经确定了需要优化的常见查询集.该集分为两部分:全文和元数据查询.
我的计划是从数据库中提取数据并将其分配到两个不同的存储系统中,每个存储系统都针对特定查询集进行了优化.
对于全文搜索,Solr是最有意义的引擎.它的分片和复制功能使其非常适合一半的问题.
对于元数据查询,我不确定要采取的路线.目前,我正在考虑使用具有极度非规范化模式的RDBMS,该模式表示来自"权威"RDBMS的数据的特定子集.但是,与已经包含它们的Solr相比,我的客户担心这种子系统缺少分片和复制以及设置这些功能的难度/复杂性.在这种情况下,元数据采用整数,日期,bool,位和字符串的形式(最大大小为10chars).
是否有一个数据库存储系统具有内置的分片和复制功能,可能对查询所述元数据特别有用?也许一个没有sql的解决方案提供了一个很好的查询引擎?
请照亮.
添加/回应:
Solr可用于元数据,但元数据是易失性的.因此,我必须经常提交索引.这会导致搜索速度非常快.
如何使用SOLR Admin删除SOLR索引中的所有文档.
我尝试使用网址但它有效,但想知道是否可以使用管理员完成相同的操作.
所以我对Solr的字段日期类型有一个问题,这是非常直接的:'date'字段和'tdate'字段之间有什么区别?
模式.xml声称"对于更快的范围查询,请考虑tdate类型"和"基于特里的日期字段"以获得更快的日期范围查询和日期分面."足够公平......但是精确的步骤="6"是什么?我该改变吗?如果我使用tdate,它会改变我创建查询的方式吗?什么是真正的优势或Solr做了什么使它变得更好?
PS通过谷歌,Solr手册,solr wiki和java文档没有任何运气,所以我很欣赏一个善意和解释性答案:)...同时检查:http : //www.lucidimagination.com/blog/2009/05/13/exploration-lucene-and-solrs-trierange-capabilities/http://web.archiveorange.com/archive/v/AAfXfqRYyLnDFtskmLRi
我听说过Lucene.Net,我听说过Apache Tika.问题是 - 如何使用C#和Java索引这些文档?我认为问题在于没有.Net等效的Tika从这些文档类型中提取相关文本.
更新 - 2011年2月5日
基于给定的响应,似乎目前不是Tika 的原生 .Net等价物.提到了两个有趣的项目,每个项目各有趣:
鉴于上述两个项目,我看到了几个选项.为了提取文本,我可以a)使用Omega正在使用的相同组件或b)使用IKVM来运行Tika.对我来说,选项b)看起来更干净,因为只有2个依赖项.
有趣的是,现在有几个搜索引擎可能可以从.Net使用.有Xapian,Lucene.Net甚至Lucene(使用IKVM).
更新 - 2011年2月7日
另一个答案是建议我查看ifilters.事实证明,这就是MS用于Windows搜索,因此Office ifilter随时可用.此外,还有一些PDF ifilters.缺点是它们是在非托管代码中实现的,因此使用COM互操作是必要的.我在DotLucene.NET档案中找到了以下代码snippit(不再是活动项目):
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
namespace IFilter
{
[Flags]
public enum IFILTER_INIT : uint
{
NONE = 0,
CANON_PARAGRAPHS = 1,
HARD_LINE_BREAKS = 2,
CANON_HYPHENS = 4,
CANON_SPACES = 8,
APPLY_INDEX_ATTRIBUTES = 16,
APPLY_CRAWL_ATTRIBUTES = 256,
APPLY_OTHER_ATTRIBUTES = 32,
INDEXING_ONLY …
Run Code Online (Sandbox Code Playgroud) 我想在Solr中的文本字段上执行搜索.我想返回范围内或没有值的所有匹配.这两个搜索词是独立的:
myfield:[start TO finish]
-myfield:[* TO *]
Run Code Online (Sandbox Code Playgroud)
第一个返回范围内的所有匹配项.第二个返回所有没有"myfield"字段值的匹配项. 问题是将这两者结合起来.
这不返回任何匹配项:
myfield:[start TO finish] OR -myfield:[* TO *]
Run Code Online (Sandbox Code Playgroud)
这将返回开始和结束之间的匹配,但不返回空条目:
myfield:[start TO finish] OR (-myfield:[* TO *])
Run Code Online (Sandbox Code Playgroud) 我正在开发一个Django项目,我需要在那里实现全文搜索.我见过SOLR并发现了一些好的评论.但是它在Java中实现并且需要将java环境与Python一起安装在系统上.寻找SOLR的python等价物,我见过Whoosh,但我不确定Whoosh是否像SOLR一样高效和强大.或者我应该只使用SOLR选项还是有比Whoosh和SOLR更好的选项?
请建议.
提前致谢
我正在开发一个需要通过搜索做有趣事情的应用程序,包括全文搜索,点击突出显示,分面搜索等...
数据集可能在3000-10000个记录之间,每个记录有20-30个字段,并且全部存储在MySQL中.该网站的流量配置文件很可能是中等规模的.
所有这些要求都可以在MySQL中实现(笨拙地),但在什么时候(就数据大小和流量水平而言)是否值得研究像Solr或Sphinx这样的更集中的技术?