2015-03-19 82 views
0

目前,我在Solr的多字詞同義詞中遇到問題。於是我想到了一個解決方案的步驟:Solr插件功能

步驟:

  1. Solr的插件攔截的搜索關鍵字。
  2. 插件將得到的縮寫,同義詞等的列表,從數據庫表
  3. 插件會被一個從同義詞列表,在2
  4. 如果存在現在只提取比較搜索關鍵詞之一,搜索關鍵詞將轉變成同義詞。
  5. 取決於結果,插件將決定將哪個fieldtype/filter/tokenizer放入6參數。
  6. 插件將返回(關鍵字,搜索哪個字段,使用哪個分析器)以供Solr搜索。

的問題:

  1. 可以攔截插件的搜索關鍵字,以便它可以在插件來處理?
  2. 我可以在Solr插件中直接從數據庫訪問並獲取記錄嗎?
  3. 可以插件告訴Solr搜索什麼,搜索哪個字段並使用什麼過濾器/標記器來搜索?或者可以直接插入在插件中搜索並彈出結果?

謝謝。

回答

0

你可能想看看諾蘭勞森的多詞同義詞解決方案。

https://github.com/healthonnet/hon-lucene-synonyms

+0

謝謝,但所有我問的問題都可以在Solr插件Java代碼中完成?例如,由於DIH可以訪問數據庫,所以我認爲插件可以直接訪問數據庫嗎? – Xonos 2015-03-19 09:08:01

+0

將數據庫內容導出到文本文件可能更容易。使用Solr 5,您可以使用API​​更改同義詞文件。 – 2015-03-19 09:36:07

0

是的。這裏是一個例子,通過編寫你自己的SearchComponent來做到這一點。

solrconfig.xml中

<requestHandler name="/myHandler" class="solr.SearchHandler"> 
    <arr name="first-components"> 
     <str>myComponent</str> 
    </arr> 
</requestHandler> 

<searchComponent name="myComponent" class="com.xyz.MyComponent" /> 

public class MyConponent extends SearchComponent { 
    .... 

    @Override 
    public void prepare(ResponseBuilder rb) throws IOException { 
     String originalQuery = rb.getQueryString(); //get the original query string 

     // access to DB and get records here 
     // then construct a new query string and set to rb. 

     rb.setQueryString(newQueryString); 
    } 
} 

使用「/ myHandler」而不是「/ select」來獲得結果。