要允許用戶使用Lucene 3.5在多個字段中進行搜索,我當前爲要搜索的每個字段創建並添加QueryParser至DisjunctionMaxQuery。這在使用或作爲默認操作員時很有用,但我現在想要將默認操作員更改爲和以獲得更準確(更少)的結果。Lucene:使用默認運算符搜索多個字段= AND
問題是,queryParser.setDefaultOperator(QueryParser.AND_OPERATOR)
錯過了許多文件,因爲所有術語必須在至少1個字段。
例如,考慮文檔的以下數據:title field =「Programming Languages」,body field =「Java,C++,PHP」。如果用戶要搜索Java編程此特定文檔將不會包含在結果中,因爲標題或主體字段包含查詢中的所有術語(儘管它們組合在一起)。我希望爲上述查詢返回此文檔,但不希望查詢HTML編程。
我已經考慮了一個catchall字段,但我有一些問題。首先,用戶經常在他們的查詢中包含每個領域的術語(作者:賬單),這對於一個查詢字段來說是不可能的。另外,我用FastVectorHighlighter突出顯示某些字段,這些字段需要對它們進行索引和存儲。因此,通過添加一個catchall字段,我將不得不索引大部分相同的數據兩次,這是時間和空間消耗。
任何想法?
關於對catchall字段進行索引,是否觀察到引起關注的時間/空間命中?我的經驗是索引特定存儲字段中的相同數據,然後添加到廣義索引字段對性能或索引大小的影響相當小。 – femtoRgon
另外,我不知道結束查詢的結構是什麼樣子。特別是如何設置dis-max查詢。容易殺死你獲得有意義的分數的能力。 – femtoRgon
@femtoRgon disjunctionMaxQuery結構如下所示:'((title:java title:programming)|(body:java body:programming))〜0.2'您提到了一個很好的觀點,即添加catchall字段可能對遠程時間影響不大/空間有關。我當然認爲它,但決定反對它,因爲我還想保持按字段搜索的能力,例如作者:賬單。用戶不僅使用此功能,而且在幕後使用它。謝謝。 –