4

Solr では、構文を使用して順序付き近接検索を実行できます

"word1 word2"~10

順序付けによって、ドキュメント内で word1 が常に word2 の前に来ることを意味します。順序付けられていない近接検索を実行する簡単な方法があるかどうかを知りたいです。word1 と word2 は、互いに 10 語以内に出現し、どちらが先であっても問題ありません。

これを行う1つの方法は次のとおりです。

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

上記は機能しますが、可能であればもっと簡単なものを探しています。

4

3 に答える 3

8

スロップとは、単語の転置が何回起こり得るかを意味します。したがって、「a b」は「b a」とは異なるものになります。これは、許可される転置の数が異なるためです。

  • a foo b(a,1)、(foo, 2)、(b, 3) の位置があります。(a,1)、(b,2) に一致させるには、1 つの変更が必要です: (b,2) => (b,3)
  • ただし、(b,1)、(a,2) に一致させるには、(a,2) => (a,1) および (b,1) => (b,3) が必要で、合計 3 つの位置が必要です。動き

一般に、"a b"~n何かに一致する場合は、それ"b a"~(n+2)にも一致します。

編集:私は決して答えなかったと思います。2 つのオプションが表示されます。

  1. n の勾配が必要な場合は、n+2 に増やします。
  2. あなたが提案したように手動で検索を分離します

最初からスロップが非常に大きい場合を除き、おそらく#2の方が優れていると思います。

于 2010-11-03T14:25:22.747 に答える
2

すでにそのように機能していないと確信していますか?それが「順序付けられた」と言っているドキュメントには何もありません:

近接検索は、ずさんなフレーズ クエリで実行できます。ドキュメント内で 2 つの用語が近くにあるほど、スコアは高くなります。ずさんなフレーズ クエリでは、最大の「slop」、または一致を取得するためにトークンを移動する必要がある位置の数が指定されます。

標準リクエスト ハンドラのこの例では、「movie」の 100 語以内に「batman」が含まれるすべてのドキュメントを検索します。

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

于 2010-11-02T16:00:14.427 に答える