Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 有序与无序的Solr接近度_Search_Lucene_Solr_Proximity - Fatal编程技术网

Search 有序与无序的Solr接近度

Search 有序与无序的Solr接近度,search,lucene,solr,proximity,Search,Lucene,Solr,Proximity,在Solr中,您可以使用语法执行有序邻近搜索 "word1 word2"~10 我所说的有序,是指文档中的word1总是位于word2之前。我想知道是否有一种简单的方法来执行无序的邻近搜索,即word1和word2出现在彼此10个单词的范围内,并且哪一个先出现并不重要 一种方法是: "word1 word2"~10 OR "word2 word1"~10 上面的方法行得通,但如果可能的话,我正在寻找更简单的方法。你确定它已经不能像那样工作了吗?文档中没有任何内容表明它是“有序的”: 近似搜索

在Solr中,您可以使用语法执行有序邻近搜索

"word1 word2"~10
我所说的有序,是指文档中的word1总是位于word2之前。我想知道是否有一种简单的方法来执行无序的邻近搜索,即word1和word2出现在彼此10个单词的范围内,并且哪一个先出现并不重要

一种方法是:

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

上面的方法行得通,但如果可能的话,我正在寻找更简单的方法。

你确定它已经不能像那样工作了吗?文档中没有任何内容表明它是“有序的”:

近似搜索可以通过松散的短语查询完成。两个术语在文档中出现的距离越近,分数越高。草率短语查询指定最大“草率”,或需要移动标记以获得匹配的位置数

标准请求处理程序的这个示例将查找“蝙蝠侠”出现在“电影”100字以内的所有文档:


Slop表示可以发生多少单词换位。所以“ab”将不同于“ba”,因为不同数量的换位是允许的

  • a foo b
    有位置(a,1)、(foo,2)、(b,3)。要匹配(a,1),(b,2)将需要一个更改:(b,2)=>(b,3)
  • 但是,要匹配(b,1)、(a,2),您需要(a,2)=>(a,1)和(b,1)=>(b,3),总共三个位置移动
通常,如果
“ab”~n
匹配某个对象,那么
“ba”~(n+2)
也将匹配该对象

编辑:我想我从未给出过答案。我看到两种选择:

  • 如果希望坡度为n,请将其增加到n+2
  • 按照您的建议手动分离您的搜索

  • 我认为#2可能更好,除非你的污水从一开始就非常大。

    因为Solr 4是可能的

    例如,进行有序搜索(查询时,“短语二”紧跟在“短语一”之后不超过3个单词):

    进行无序搜索(在“短语一”的5个单词附近查询“短语二”):


    是的,文档中对此并不清楚,但在我运行的实例中,这是它的行为方式,即“邻近Solr”~2会给“邻近Solr”~2带来不同的结果。我发现这非常有用
    3W(phrase W one, phrase W two)
    
    5N(phrase W one, phrase W two)