3

我的目標是在LinkedIn等搜索引擎項目中提供單一搜索框模型。識別單一搜索框模型查詢中關鍵字類別的算法

我試圖用類比來表達我的問題。

讓我們假設每個結果的文章,有多個維度,比如作者,主題會議(如果這是一個出版物),託管網站等

一些樣本查詢:

  • 「信息檢索論文在IEEE作者XYZ「:三個維度{主題,conf-name,作者姓名}

  • 」ACM論文authoABC對設計模式「:三維{conf-名稱,作者,主題}

  • 「多線程編程的JavaRanch的」:兩個維度{話題,網站}

我已經查明在一個大的查詢這些尺寸和對應的關鍵字之前,我可以檢索從最終結果數據庫。

  • 我已經給所有尺寸訪問所有可能的值。例如,我擁有所有會議名稱,作者姓名等。
  • 跨維度的術語幾乎沒有重疊。

我的做法(幼稚)

  • 使用Lucene,指數都在一個名爲「維」專用場,並與實際值的另一場每個維度的關鍵字。 例:

    1){名稱:IEEE,尺寸:會議}等

    2){名稱:OOAD,尺寸:主題}等

    3){名稱:XYZ,維度:作者}等。

  • 使用查詢原樣搜索索引。
  • 在一定程度上對結果進行迭代,並識別具有新維度的第一個文檔。

問題

  • 不知道何時停止從結果集中識別的尺寸。例如,查詢可能只包含兩個維度,但結果可能匹配三個維度。
  • 如果我想包含拼寫檢查,它會變得更加複雜,結果往往不太準確。

參考論文,文章或指出描述我的問題域等的正確術語肯定會有所幫助。

任何指導,高度讚賞。

回答

1

你需要做的是計算查詢和您正在尋找文檔集合之間的相似性。像餘弦相似措施應該成爲你的需要。然而,您可以使用的黑客計算文檔的Tf/idf並使用該分數創建索引,然後您可以選擇合適的分數。我會建議你看看Vector Space Model找到一種方法,以滿足您的需要! 給這個算法看看藏漢 http://en.wikipedia.org/wiki/Okapi_BM25

+0

矢量空間模型,TF-IDF,BM25等是任何搜索引擎的基本構建模塊。 OP正在使用Lucene,因此已經使用了您提到的所有內容。 – Yavar

2

解決方案1 ​​:那麼如何解決有關使用自然語言處理命名實體識別(NER)你的問題。現在可以使用簡單的正則表達式(在數據太靜態的情況下)完成NER,否則您可以使用像隱馬爾可夫模型這樣的一些機器學習技術來實際找出序列數據集中已命名的實體。與其他機器學習監督算法相比,爲什麼我強調HMM是因爲您有順序數據,每個狀態都依賴於上一個或下一個狀態。 NER會爲您輸出尺寸以及相應的名稱。之後,您的搜索將成爲垂直搜索問題,您可以在不同的Solr/Lucene字段中搜索已識別的單詞並相應地設置提升。

現在來到實現部分,我假設你在使用Lucene的時候知道Java,所以Mahout是一個不錯的選擇。 Mahout內置了HMM,您可以在數據集上訓練+測試模型。我也假設你有大數據集。

解決方案2:嘗試將此問題建模爲屬性圖問題。看看類似Neo4j的東西。我建議你這樣做,因爲你的問題屬於無模式域。您的模式不是固定的,而且問題可以很好地模擬爲一個圖形,其中每個節點都是一組鍵值對。

解決方案3:正如你所說,你有尺寸的所有可能值比任何其他事情之前爲什麼不能簡單地從你的文字使用正則表達式轉換所有非結構化數據結構化數據,並再次爲你沒有固定的模式將數據存儲在任何NoSQL密鑰值數據庫中。他們大多提供Lucene Integrations進行全文搜索,然後簡單地搜索這些數據庫。

+0

感謝您的詳細解答。 – phani