2010-11-02 18 views
4

Solr中,你可以使用语法Solr的接近有序VS无序

"word1 word2"~10 

通过下令我的意思是字1总是将文档中的单词2之前来执行有序邻近搜索。我想知道是否有简单的方法来执行无序的邻近搜索,即。 word1和word2发生在彼此的10个字以内,并且无关紧要。要做到这一点

一种方法是:

"word1 word2"~10 OR "word2 word1"~10 

上述工作,但我正在寻找简单的东西,如果可能的话

由于提前 露丝

回答

7

趿拉意味着如何发生多字的换位。所以“一个b”将会与“b a”不同,因为允许不同数目的转置。

  • a foo b具有位置(a,1),(foo,2),(b,3)。 (b,2)=>(b,3)
  • 然而,要匹配(b,1),(a,2),您将需要(A,2)=>(A,1)和(b,1)=>(b,3),用于总共三个位置运动

一般来说,如果"a b"~n匹配的东西,那么"b a"~(n+2)也会匹配它。

编辑:我想我从来没有给出答案。我看到两个选项:

  1. 如果你想为n的斜率,它提高到N + 2
  2. 手动disjunctivize搜索像你所说

我觉得#2可能是更好的,除非你的污水是非常大的开始。

+0

谢谢我发现这是非常有用的 – Ruth 2010-11-08 15:17:22

2

确定它已经不这样了?文档中没有任何内容说明它是“有序的”:

可以用粗糙的词组查询来完成邻近搜索。文件中出现两个词越接近,得分越高。粗言秽语的查询指定了最大的“污点”,或位置令牌的数量需要被移动以获得匹配。

本示例为标准请求处理程序会发现这里的“蝙蝠侠”中的“电影”的100个字出现的所有文件:

http://wiki.apache.org/solr/SolrRelevancyFAQ#How_can_I_search_for_one_term_near_another_term_.28say.2C_.22batman.22_and_.22movie.22.29

+0

是的文档不清楚它,但在我运行这个例子是它是如何表现,即。 “邻近Solr”〜2会给“Solr邻近”带来不同的结果〜2 – Ruth 2010-11-03 11:45:49

1

由于Solr 4有可能与SurroundQueryParser

E.g.做到有序搜索(查询,其中“语二”后,遵循“短语一个”不进一步超过3个字):

3W(phrase W one, phrase W two) 

要做好的“这句话一个5个字接近无序搜索(查询“这句两个” “):

5N(phrase W one, phrase W two)