Home php c# sql c c++ javascript python java go android git linux asp.net django .net node.js ios xcode cocoa iphone mysql tomcat mongodb bash objective-c scala visual-studio apache elasticsearch jar eclipse jquery ruby-on-rails ruby rubygems android-studio spring lua sqlite emacs ubuntu perl docker swift amazon-web-services svn html ajax xml java-ee maven intellij-idea rvm macos unix css ipad postgresql css3 json windows-server vue.js typescript oracle hibernate internet-explorer github tensorflow laravel symfony redis html5 google-app-engine nginx firefox sqlalchemy lucene erlang flask vim solr webview facebook zend-framework virtualenv nosql ide twitter safari flutter bundle phonegap centos Register | Login | Edit Tags | New Questions | 繁体 | 简体


3 questions online user: 18

0
votes
answers
4 views
+10

Solr如何存儲文件

0

我知道Solr使用Lucene和Lucene使用倒排索引。但從目前爲止我看到的Lucene例子中,我不確定我是否理解它與Solr的結合。Solr如何存儲文件

給出下列文件:

<doc> 
    <field name="id">9885A004</field> 
    <field name="name">Canon PowerShot SD500</field> 
    <field name="manu">Canon Inc.</field> 
    <field name="inStock">true</field> 
</doc> 

從到目前爲止,我所看到的例子,我認爲Lucene的具有對待每個字段作爲文檔。然後它會說:ord Cannon出現在字段name和字段manu中。

索引分解了多少?或者索引只是說:「佳能這個詞出現在id爲這樣的文件」?

如何在Solr中使用Lucene時如何工作? 該文件在索引中的外觀如何? (假設每個字段都有indexed="true"

+1

您可以[通過在2013年從Lucene的/ Solr的革命演示一個如何Lucene的存儲數據的詳細綱要(獲得https://www.slideshare.net/lucenerevolution/what -is-inaluceneagrandfinal)。我不確定它是否提到了DocValues,它是一個面向列的存儲,而不是常規的倒排索引,可以加速某些操作。 – MatsLindh

+0

@MatsLindh感謝您的信息! – user3813234

沙发
0
1

我幾年前發了一篇博文,詳細解釋一下[1]。

簡短回答了這個問題:「從我到目前爲止看到的例子,我認爲Lucene的具有對待每個字段的文檔」

絕對不是。 Lucene信息單元是由地圖字段 - >值[s]組成的文檔。 Solr文檔只是一個稍微不同的表示,因爲Solr在描述字段的地方包含模式。 因此,在Solr中,您只需將字段添加到文檔中,而無需描述類型和其他屬性(存儲在模式中),而在Lucene中,您需要在創建文檔時明確定義它們。

[1] https://sease.io/2015/07/26/exploring-solr-internals-the-lucene-inverted-index/

0
votes
answers
4 views
+10

elasticsearch vs solr - 用於自定義全文搜索系統

0

我有一個基於Lucene索引的內部創建的搜索引擎的Web應用程序。elasticsearch vs solr - 用於自定義全文搜索系統

該應用程序允許全文搜索。

該應用程序使用jsp和java構建。

爲用戶索引Hadoop分佈式處理軟件。

Apache lucene項目是根據我們的具體情況定製的。主要是全文搜索的部分,添加訂購結果的新功能。

前端使用hadoop-rpc與後端進行通信,後者又創建了一個內部解決方案(10年前),用於研究Lucene的未知事件。

該代碼是遺留的,它需要遷移到另一種類型的軟件。這裏的問題:ElasticSearchSolr

的要求是:

  • 開源的,目的是爲了自定義接受特定功能的應用程序的排名 。
  • 使用Lucene索引(因爲你 不想重新索引)。
  • 速度是非常重要的因素。

我已閱讀了一些關於這個主題的文章,但我想爲我的個案提供個性化的意見,任何想法哪一個將是最好的選擇?

謝謝

+0

兩者都可以很好地工作。哪種方法最好,取決於超出可以在這裏描述的因素以及您的詳細信息要求,但通常這對兩個平臺都是「足夠好」。無論如何,他們都是Lucene。 – MatsLindh

+0

請參考此問題:https://stackoverflow.com/questions/10213009/solr-vs-elasticsearch?rq=1 – Val

沙发
0
0

SolR和Elasticsearch非常相似。他們都有你需要的功能。

這是一個非常開放的問題,我的觀點是Elasticsearch將是一個更好的選擇,它有一個更大的社區,並且往往會增長得更快。

enter image description here

板凳
0
0

定製更多您需要的解決方案是,你就越有可能會從Solr的受益。

雖然他們都使用Lucene的封面,但Solr直接暴露了更多。 Elasticsearch針對日誌和事物進行了更多調整,一些文本搜索配置更難以訪問。

+0

好吧,我明白了。哪一個有最好的技術支持?最好的代碼可以定製?從我看到的都有一個很好的在線社區,但哪一個更適合定製搜索引擎? – lucy

+0

Solr具有更好的定製性,因爲絕對一切都是開源的。彈性可能有更好的支付。免費支持,我不知道。 –

0
votes
answers
1 views
+10

在SearchManager中使用IndexWriter

0

關於SearcherManager在IndexWriter中的用法,我有幾個基本問??題。在SearchManager中使用IndexWriter

我需要定期在應用程序中重新構建Lucene索引,目前它發生在除提供搜索請求的線程以外的其他線程中。

  1. 我可以在應用程序的生命週期中使用相同的IndexWriter實例來定期重建索引嗎?目前,我在創業期間創建/打開一次,每當建立新索引時致電IndexWriter#commit
  2. 我正在使用SearcherManager來爲每個搜索請求獲取併發布IndexSearcher實例。在定期建立索引之後,我打算使用SearcherManager#maybeRefresh方法來刷新IndexSearcher實例.SearcherManager實例在啓動過程中也會創建一次,並且我打算徹底維護它。
  3. 在整個應用程序的整個生命週期中,我都沒有關閉IndexWriterSearcherManager

現在的問題,

  1. 如果我每一次我需要重建索引的時間創建一個新的IndexWriter,將SearcherManager#maybeRefresh能夠檢測到,這是一個新的IndexWriter實例?或者我需要使用新創建的IndexWriter創建一個新的SearcherManager?
  2. 什麼用IndexWriter創建SearcherManager例如,使用DirectoryReader或使用Directory創建它創造的區別吧?
沙发
0
1

這些問題的答案取決於你如何構建你的SearcherManager

如果您有DirectoryReader,從SearcherManager獲得的所有未來IndexSearchers將根據該讀者構造它,即所有搜索將從實例化SearcherManager的時間點提供結果。如果您將數據寫入索引/目錄並在之後運行SearcherManager.maybeRefresh(),讀卡器將不會更新,並且您的搜索結果將過期。

如果構建SearcherManager時使用IndexWriterSearcherManager.maybeRefresh()將更新SearcherManager的閱讀器(如果數據已被寫入器寫入並提交)。所有新近收購的IndexSearchers將會反映潛在指數的新狀態。

儘管經驗有限,我推薦使用後一種方法。它提供了一個非常簡單的方法來實現near-real-time searching:在應用程序啓動時,您創建一個IndexWriter並用它構造一個SearcherManager。之後,您將開始一個後臺線程,該線程定期提交IndexWriter中的所有更改並刷新SearcherManager。對於應用程序的生命週期,您可以繼續使用初始的IndexWriter和SearcherManager,而無需關閉/重新打開它們。


PS:我纔開始使用Lucene工作前幾天,所以不要採取一切,我在這裏寫下的100%確定。