2016-08-17 74 views
0

我查詢的文本(和查詢本身)平均有11個單詞(最多約25個)。我希望我的查詢僅在查詢中的至少一半單詞在文本中匹配時才返回匹配。Lucene/Elasticsearch/Solr中最少的單詞匹配數

例如,這是我最初的Lucene的查詢的樣子(爲簡單起見,它只有4個字):

jakarta~ apache~ lucene~ stackoverflow~ 

它會返回一個匹配,如果的話至少一個模糊匹配,但我只有當至少有任何兩個單詞(半數4個)模糊匹配時才希望它返回匹配。

在Lucene中可能嗎?

我可能分裂我這樣的查詢(OR是Lucene的默認運算符):

(jakarta~ apache~) AND (lucene~ stackoverflow~) 

但不會返回匹配既是jakartaapache匹配但沒有lucenestackoverflow匹配。

我可以改變我的查詢:

(jakarta~ AND apache~) (jakarta~ AND lucene~) (jakarta~ AND stackoverflow~) 
(apache~ AND lucene~) (apache~ and stackoverflow~) (lucene~ AND stackoverflow~) 

請問這是否有效?平均而言,我的表達將包含462 AND條款(二項係數爲11和6),最壞的情況下爲5200300 AND條款(二項係數爲25和13)。

如果在Lucene中不可能(或者沒有意義的性能),那麼在Elasticsearch或Solr中可能嗎?

對於數據庫中至少10 000個文本,它應該工作得很快(< = 0.5秒/搜索)。

如果我稍後可以輕鬆更改最低匹配百分比(例如,40%而不是50%),那就更好了,但我可能不需要這樣做。

回答

0

在Solr中,您可以使用minimum match (mm) parameter與DisMax和eDisMax,並且您可以指定預期匹配的百分比。

+0

這看起來像我後。我會嘗試Solr,謝謝! – Rusty

1

所有三個選項都支持可選查詢子句中的最小匹配功能。

+0

謝謝。有沒有在查詢分析器語法中使用'BooleanQuery.Builder.setMinimumShouldMatch'的方法?我通過Neo4j REST API使用Lucene。我可以使用自定義的Lucene分析器。 – Rusty

+0

@Rusty - 不,標準查詢語法分析器恐怕不支持它,而且我真的不熟悉Neo4j在那裏建議最好的方法。 – femtoRgon