翻译
-
使用 Redis 实现分布式锁
分布式锁是一个非常有用的原语,在需要不同进程间互斥操作共享资源时使用。
有很多的开发库和博客描述如何使用Redis实现DLM(Distributed Lock Manager,分布式锁管理),每个开发库使用不同的方式,有的设计与实现相对复杂一些,有的简单低可靠。
本文尝试提供更标准的算法来使用Redis实现分布式锁。我们提出一种叫做 Redlock 的算法,我们认为它能够实现比vanilla单例方式更安全的DLM。我们希望社区分析它并提供反馈,以做为更加复杂或替代设计的一个实现。 -
solr-搜索-Solr解析器通用的查询参数
本文主要介绍下Solr解析器中通用的查询参数。这些参数能够在标准查询解析器、DisMax查询解析器及eDisMax查询解析器中通用。
-
solr-搜索-查询中的局部参数
局部参数是Solr请求的特定的一种查询参数。局部参数提供了设置某些元数据的方法,比如,查询字符串。(在Solr文档中,局部参数有local parameters和LocalParams两种写法。)
局部参数指定参数的前缀,以下面的查询参数为例:q=solr rocks
我们可以为这个查询串设置局部参数,来为标准查询解析器提供更多的信息。比如,我们修改默认操作符为
AND
和默认搜索域为“title”:q={!q.op=AND df=title}solr rocks
这样就能够在搜索过程中,查询“title”域中匹配的“solr”和“rocks”的结果。
-
solr-搜索-eDisMax查询解析器
DisMax扩展(eDisMax)查询解析器是DisMax查询解析器的升级版。除了支持所有DisMax查询解析器参数外,还扩展了DisMax:
- 支持完整的Lucene的查询分析器语法。
- 支持查询,例如
AND
,OR
,NOT
,-
, 和+
。 - 在Lucene查询语法模式中,把
and
和or
当做AND
和OR
。 - 使用“魔术字段”
_val_
和_query_
。这些字段在schema.xml
中不存在,但可以用他们来做一些特别的事情(比如使用_val_
做方法查询,或使用_query_
做嵌套查询)。如果在候选词或短语查询中使用_val_
,它将被解析为一个方法。 - 在语法错误的情况下,包括改进的智能部分逃逸;字段查询、
+/-
和 短语查询在这种模式中也可用。 - 使用word shingles改进接近加权;您不需要查询来匹配文档中的所有单词,在接近提高之前应用。在接近加权提供前,你不需要查询匹配所有单词。
- 包括先进的停用词处理:停用词不是查询必需部分,但却在接近加权部分中使用。如果查询包含所有停用词,比如”to be or not to be”,则所有词都必须存在。
- 包括改进的加权方法:在eDisMax中,加权方法是乘数而不是加数,改善加权效果;DisMax中的加和的加权(bf和bq)也同样支持。
- 支持纯消极嵌套查询:查询如
+foo
(-foo
)将查询匹配所有文档。 - 可以指定终端用户可以查询哪些字段,和禁止直接指派搜索。
-
solr-搜索-标准查询解析器
Solr默认的查询解析器使用的lucene解析器。
标准查询解析器的主要优势在于它支持强大且直观的语法,允许创建各种结构化的查询。与DisMax查询解析器相比,最大的缺点是它不能够容忍语法错误,而DisMax查询解析器比设计为尽可能少的返回错误。 -
solr-搜索-层面分析
在部分概述在Solr搜索描述,分类是基于索引的搜索结果方面的安排。搜索与索引方面,随着数值计算有多少匹配的文件被发现是每学期。小面很容易让用户探索的搜索结果,缩小正是他们正在寻找的结果。
根据Solr搜索概述中的描述,层面分析是基于搜索结果的排列。所有的Searcher都携带有索引term,随着匹配文档,term也被发现。层面分析简化用户对搜索结果的处理,缩小查找结果范围。 -
solr-搜索-DisMax查询解析器
DisMax查询解析器设计的初衷是处理用户输入的简单短语(没有复杂语法),在多个根据不同含义使用不同权重的字段间进行搜索。另外还有额外的选项,使用户可以根据具体用例(根据用户的输入)影响打分。
总的来说,DisMax查询解析器比标准Solr查询请求更像Google的接口。对于许多付费应用,这种相似性使DisMax成为更加适当的查询解析器。她能够接收简单的语法,却很少发生错误。