Solr接近有序与无序

Rut*_*uth 4 lucene search solr proximity

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

"word1 word2"~10
Run Code Online (Sandbox Code Playgroud)

按顺序排列,我的意思是word1将始终位于文档中的word2之前.我想知道是否有一种简单的方法来执行无序的邻近搜索,即.word1和word2出现在彼此的10个单词之间,首先出现的并不重要.

一种方法是:

"word1 word2"~10 OR "word2 word1"~10
Run Code Online (Sandbox Code Playgroud)

如果可能的话,上面的内容会有效,但我正在寻找更简单的东西.

Xod*_*rap 7

Slop表示可以发生多少个单词转置.所以"a b"将与"b a"不同,因为允许不同数量的转置.

  • 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),总共三个位置运动

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

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

  1. 如果你想要一个n的斜率,将它增加到n + 2
  2. 像你建议的那样手动取消你的搜索功能

我认为#2可能更好,除非你的slop非常大.