<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>solr &#8211; 記下來</title>
	<atom:link href="https://noter.tw/tag/solr/feed/" rel="self" type="application/rss+xml" />
	<link>https://noter.tw</link>
	<description>一路上踩到的坑、遇到的問題，一點一滴記下來，希望能幫助到需要的人~</description>
	<lastBuildDate>Sat, 10 Jul 2021 08:01:42 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.3</generator>

<image>
	<url>https://noter.tw/wp-content/uploads/cropped-old-1130742_1920-1-32x32.jpg</url>
	<title>solr &#8211; 記下來</title>
	<link>https://noter.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Solr 教學 (5) – 建立新的 Core</title>
		<link>https://noter.tw/3170/solr-%e6%95%99%e5%ad%b8-5-%e5%bb%ba%e7%ab%8b%e6%96%b0%e7%9a%84-core/</link>
					<comments>https://noter.tw/3170/solr-%e6%95%99%e5%ad%b8-5-%e5%bb%ba%e7%ab%8b%e6%96%b0%e7%9a%84-core/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 08 Jan 2014 06:19:30 +0000</pubDate>
				<category><![CDATA[資料庫]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[DataImportHandler]]></category>
		<category><![CDATA[batchSize]]></category>
		<category><![CDATA[db-data-config.xml]]></category>
		<category><![CDATA[java.sql.SQLException: Illegal value for setFetchSize()]]></category>
		<category><![CDATA[schema.xml]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mariadb]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[solrconfig.xml]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3170</guid>

					<description><![CDATA[<p>這篇文章小蛙要記錄怎麼樣新建一個 Core 並且也加入 DataImportHandler 的方法。其他相關 Solr 系列文章請參考：Solr 教學 (1) – 安裝篇Solr 教學 (2) – t&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3170/solr-%e6%95%99%e5%ad%b8-5-%e5%bb%ba%e7%ab%8b%e6%96%b0%e7%9a%84-core/" data-wpel-link="internal">Solr 教學 (5) – 建立新的 Core</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>這篇文章小蛙要記錄怎麼樣新建一個 Core 並且也加入 DataImportHandler 的方法。<br><span id="more-3170"></span>其他相關 Solr 系列文章請參考：<br><a href="https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Solr 教學 (1) – 安裝篇</a><br><a href="https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面</a><br><a href="https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Solr 教學 (3) – 以 Remote Address Filter 限制存取</a><br><a href="https://noter.tw/3160/solr-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-dataimport-%e5%8c%af%e5%85%a5%e8%b3%87%e6%96%99%e5%ba%ab%e8%b3%87%e6%96%99/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Solr 教學 (4) – 使用 DataImport 匯入資料庫資料</a></p>
<p>上一篇記錄了怎麼透過 DataImportHandler 來將 MySQL 的資料匯入到 Solr 中，剛詢問了同事，一個 Core 可以大概看成資料庫中的一個 table，所以要匯入兩個不相關的 table 要用兩個 Core，雖然網路上好像有人提到可以將兩個不相干的 table 匯入到一個 Core 中，不過小蛙的 table 不多，就用簡單的做法就好。</p>
<p>小蛙的 index 環境是在 /opt/solr/example，最快的方法是直接把 example 資料夾複製一個新的並且改名字，這邊小蛙想要有一個 news 的 core， 使用自己建立必要資料夾的方法，建立以下資料夾</p>
<pre>/opt/solr/news/
/opt/solr/news/conf
/opt/solr/news/data</pre>
<p>再將原本 /opt/solr/example/conf/ 下的&nbsp;db-data-config.xml,&nbsp;schema.xml,&nbsp;solrconfig.xml 這三個檔案複製到&nbsp;/opt/solr/news/conf/ 目錄中。</p>
<p>接著修改 /opt/solr/solr.xml，加入新的 core</p>
<div>
<div id="highlighter_990520" class="syntaxhighlighter  xml">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="xml plain">&lt;?</code><code class="xml keyword">xml</code> <code class="xml color1">version</code><code class="xml plain">=</code><code class="xml string">"1.0"</code> <code class="xml color1">encoding</code><code class="xml plain">=</code><code class="xml string">"UTF-8"</code> <code class="xml plain">?&gt;</code></div>
<div class="line number2 index1 alt1"><code class="xml plain">&lt;</code><code class="xml keyword">solr</code> <code class="xml color1">persistent</code><code class="xml plain">=</code><code class="xml string">"true"</code><code class="xml plain">&gt;</code></div>
<div class="line number3 index2 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">cores</code> <code class="xml color1">adminPath</code><code class="xml plain">=</code><code class="xml string">"/admin/cores"</code><code class="xml plain">&gt;</code></div>
<div class="line number4 index3 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">core</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"example"</code> <code class="xml color1">instanceDir</code><code class="xml plain">=</code><code class="xml string">"example"</code> <code class="xml plain">/&gt;</code></div>
<div class="line number5 index4 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">core</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"News"</code> <code class="xml color1">instanceDir</code><code class="xml plain">=</code><code class="xml string">"news"</code> <code class="xml plain">/&gt;</code></div>
<div class="line number6 index5 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">...</code></div>
<div class="line number7 index6 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;/</code><code class="xml keyword">cores</code><code class="xml plain">&gt;</code></div>
<div class="line number8 index7 alt1"><code class="xml plain">&lt;/</code><code class="xml keyword">solr</code><code class="xml plain">&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>重新啟動 tomcat。小蛙在這邊就遇到很多錯誤，因為資料夾是用 root 權限建立的，而 solr 並沒有這樣的權限可以存取，所以這邊要注意把 /opt/solr/news 下的檔案擁有權都改成 tomcat7 (看 tomcat user 叫什麼就改成那個)。</p>
<p>第二個要注意的事情是一切正常運作後，點選到 DataImport 頁面開始運行時，卻出現下面的錯誤</p>
<div>
<div id="highlighter_887532" class="syntaxhighlighter  text">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="text plain">org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query: select * from news Processing Document # 1</code></div>
<div class="line number2 index1 alt1"><code class="text plain">...</code></div>
<div class="line number3 index2 alt2"><code class="text plain">Caused by: java.sql.SQLException: Illegal value for setFetchSize().</code></div>
<div class="line number4 index3 alt1"><code class="text plain">...</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>參考資料 1,2 中提到在 db-data-config.xml 中的 &lt;dataSource 加上&nbsp;batchSize=&#8221;-1&#8243; 就可以解決這個問題囉！</p>


<p><strong>Solr 系列文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/" data-wpel-link="internal">Solr 教學 (1) &#8211; 安裝篇</a></li><li><a href="https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/" data-wpel-link="internal">Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面</a></li><li><a href="https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/" data-wpel-link="internal">Solr 教學 (3) – 以 Remote Address Filter 限制存取</a></li><li><a href="https://noter.tw/3160/solr-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-dataimport-%e5%8c%af%e5%85%a5%e8%b3%87%e6%96%99%e5%ba%ab%e8%b3%87%e6%96%99/" data-wpel-link="internal">Solr 教學 (4) – 使用 DataImport 匯入資料庫資料</a></li><li><a href="https://noter.tw/3170/solr-%e6%95%99%e5%ad%b8-5-%e5%bb%ba%e7%ab%8b%e6%96%b0%e7%9a%84-core/" data-wpel-link="internal">Solr 教學 (5) – 建立新的 Core</a></li></ul>



<h2 class="para wp-block-heading">參考資料</h2>



<ul class="wp-block-list"><li><a href="http://lucene.472066.n3.nabble.com/problem-on-running-fullimport-td1707206.html" target="_blank" rel="noreferrer noopener nofollow external" aria-label=" (在新分頁中開啟)" data-wpel-link="external" class="wpel-icon-right">Solr &#8211; User &#8211; problem on running fullimport<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li><li><a rel="noreferrer noopener nofollow external" aria-label=" (在新分頁中開啟)" href="http://wiki.apache.org/solr/DataImportHandler#Configuring_JdbcDataSource" target="_blank" data-wpel-link="external" class="wpel-icon-right">DataImportHandler &#8211; Solr Wiki<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3170/solr-%e6%95%99%e5%ad%b8-5-%e5%bb%ba%e7%ab%8b%e6%96%b0%e7%9a%84-core/" data-wpel-link="internal">Solr 教學 (5) – 建立新的 Core</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3170/solr-%e6%95%99%e5%ad%b8-5-%e5%bb%ba%e7%ab%8b%e6%96%b0%e7%9a%84-core/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Solr 教學 (4) – 使用 DataImport 匯入資料庫資料</title>
		<link>https://noter.tw/3160/solr-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-dataimport-%e5%8c%af%e5%85%a5%e8%b3%87%e6%96%99%e5%ba%ab%e8%b3%87%e6%96%99/</link>
					<comments>https://noter.tw/3160/solr-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-dataimport-%e5%8c%af%e5%85%a5%e8%b3%87%e6%96%99%e5%ba%ab%e8%b3%87%e6%96%99/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 08 Jan 2014 04:00:17 +0000</pubDate>
				<category><![CDATA[資料庫]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[solrconfig.xml]]></category>
		<category><![CDATA[DataImportHandler]]></category>
		<category><![CDATA[Error loading class 'org.apache.solr.handler.dataimport.DataImportHandler']]></category>
		<category><![CDATA[匯入資料]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mariadb]]></category>
		<category><![CDATA[solr]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3160</guid>

					<description><![CDATA[<p>好一陣子沒有用 Solr，接續前幾篇Solr 教學 (1) – 安裝篇Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面Solr 教學 (3) – 以 Remote Address &#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3160/solr-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-dataimport-%e5%8c%af%e5%85%a5%e8%b3%87%e6%96%99%e5%ba%ab%e8%b3%87%e6%96%99/" data-wpel-link="internal">Solr 教學 (4) – 使用 DataImport 匯入資料庫資料</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>好一陣子沒有用 Solr，接續前幾篇<br><a href="https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Solr 教學 (1) – 安裝篇</a><br><a href="https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面</a><br><a href="https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Solr 教學 (3) – 以 Remote Address Filter 限制存取</a><br>這篇文章要記錄一下怎麼把 MySQL 裡面的資料匯入成 Solr 的索引檔。<br><span id="more-3160"></span>小蛙從參考資料1中發現匯入的動作好像不困難，就照著做下來，這邊也順便記錄一下可能會遇到的問題。</p>
<ol>
<li>修改 solrconfig.xml，這個是前幾篇提到 core 下面的，小蛙的目錄是 <span style="color: #ff0000;"><strong>/opt/solr/example/conf</strong></span>，這邊 db-data-config.xml 可以改成自己想要的名字，也可以直接使用相對路徑，考慮可能會有移機的狀況，還是盡可能使用相對路徑。
<div>
<div id="highlighter_747430" class="syntaxhighlighter  xml">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="xml plain">&lt;</code><code class="xml keyword">requestHandler</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"/dataimport"</code> <code class="xml color1">class</code><code class="xml plain">=</code><code class="xml string">"org.apache.solr.handler.dataimport.DataImportHandler"</code><code class="xml plain">&gt;</code></div>
<div class="line number2 index1 alt1"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">lst</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"defaults"</code><code class="xml plain">&gt;</code></div>
<div class="line number3 index2 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">str</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"config"</code><code class="xml plain">&gt;db-data-config.xml&lt;/</code><code class="xml keyword">str</code><code class="xml plain">&gt;</code></div>
<div class="line number4 index3 alt1"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;/</code><code class="xml keyword">lst</code><code class="xml plain">&gt;</code></div>
<div class="line number5 index4 alt2"><code class="xml plain">&lt;/</code><code class="xml keyword">requestHandler</code><code class="xml plain">&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
<li>新增資料庫連線檔 db-data-config.xml，這個檔名是上面自己設定的，跟 solrconfig.xml 放在同一個目錄下即可。依自己的環境修改 url, user, password，以及 SQL 語法及欄位對應，這邊的 field name 是資料庫的欄位。
<div>
<div id="highlighter_291252" class="syntaxhighlighter  xml">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="xml plain">&lt;</code><code class="xml keyword">dataConfig</code><code class="xml plain">&gt;</code></div>
<div class="line number2 index1 alt1"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">dataSource</code> <code class="xml color1">type</code><code class="xml plain">=</code><code class="xml string">"JdbcDataSource"</code> <code class="xml color1">driver</code><code class="xml plain">=</code><code class="xml string">"com.mysql.jdbc.Driver"</code> <code class="xml color1">url</code><code class="xml plain">=</code><code class="xml string">"jdbc:<a href="mysql://localhost:3306/test" target="_blank" rel="noopener" data-wpel-link="internal">mysql://localhost:3306/test</a>"</code> <code class="xml color1">user</code><code class="xml plain">=</code><code class="xml string">"myusername"</code> <code class="xml color1">password</code><code class="xml plain">=</code><code class="xml string">"mypassword"</code><code class="xml plain">/&gt;</code></div>
<div class="line number3 index2 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">document</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"mydocument"</code><code class="xml plain">&gt;</code></div>
<div class="line number4 index3 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">entity</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"item"</code> <code class="xml color1">query</code><code class="xml plain">=</code><code class="xml string">"SELECT * FROM stockTable"</code><code class="xml plain">&gt;</code></div>
<div class="line number5 index4 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">field</code> <code class="xml color1">column</code><code class="xml plain">=</code><code class="xml string">"ID"</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"id"</code> <code class="xml plain">/&gt;</code></div>
<div class="line number6 index5 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">field</code> <code class="xml color1">column</code><code class="xml plain">=</code><code class="xml string">"SNO"</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"no"</code> <code class="xml plain">/&gt;</code></div>
<div class="line number7 index6 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">field</code> <code class="xml color1">column</code><code class="xml plain">=</code><code class="xml string">"SNAME"</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"name"</code> <code class="xml plain">/&gt;</code></div>
<div class="line number8 index7 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">field</code> <code class="xml color1">column</code><code class="xml plain">=</code><code class="xml string">"STYPE"</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"type"</code> <code class="xml plain">/&gt;</code></div>
<div class="line number9 index8 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;/</code><code class="xml keyword">entity</code><code class="xml plain">&gt;</code></div>
<div class="line number10 index9 alt1"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;/</code><code class="xml keyword">document</code><code class="xml plain">&gt;</code></div>
<div class="line number11 index10 alt2"><code class="xml plain">&lt;/</code><code class="xml keyword">dataConfig</code><code class="xml plain">&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
<li>修改 schema.xml，改成自己的設定
<div>
<div id="highlighter_199988" class="syntaxhighlighter  xml">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="xml plain">&lt;?</code><code class="xml keyword">xml</code> <code class="xml color1">version</code><code class="xml plain">=</code><code class="xml string">"1.0"</code> <code class="xml plain">?&gt;</code></div>
<div class="line number2 index1 alt1"><code class="xml comments">&lt;!--</code></div>
<div class="line number3 index2 alt2"><code class="xml spaces">&nbsp;</code><code class="xml comments">Licensed to the Apache Software Foundation (ASF) under one or more</code></div>
<div class="line number4 index3 alt1"><code class="xml spaces">&nbsp;</code><code class="xml comments">contributor license agreements. See the NOTICE file distributed with</code></div>
<div class="line number5 index4 alt2"><code class="xml spaces">&nbsp;</code><code class="xml comments">this work for additional information regarding copyright ownership.</code></div>
<div class="line number6 index5 alt1"><code class="xml spaces">&nbsp;</code><code class="xml comments">The ASF licenses this file to You under the Apache License, Version 2.0</code></div>
<div class="line number7 index6 alt2"><code class="xml spaces">&nbsp;</code><code class="xml comments">(the "License"); you may not use this file except in compliance with</code></div>
<div class="line number8 index7 alt1"><code class="xml spaces">&nbsp;</code><code class="xml comments">the License. You may obtain a copy of the License at</code></div>
<div class="line number9 index8 alt2"><code class="xml comments"><a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">http://www.apache.org/licenses/LICENSE-2.0<span class="wpel-icon wpel-image wpel-icon-6"></span></a></code></div>
<div class="line number10 index9 alt1"><code class="xml comments">Unless required by applicable law or agreed to in writing, software</code></div>
<div class="line number11 index10 alt2"><code class="xml spaces">&nbsp;</code><code class="xml comments">distributed under the License is distributed on an "AS IS" BASIS,</code></div>
<div class="line number12 index11 alt1"><code class="xml spaces">&nbsp;</code><code class="xml comments">WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</code></div>
<div class="line number13 index12 alt2"><code class="xml spaces">&nbsp;</code><code class="xml comments">See the License for the specific language governing permissions and</code></div>
<div class="line number14 index13 alt1"><code class="xml spaces">&nbsp;</code><code class="xml comments">limitations under the License.</code></div>
<div class="line number15 index14 alt2"><code class="xml comments">--&gt;</code></div>
<div class="line number16 index15 alt1"><code class="xml plain">&lt;</code><code class="xml keyword">schema</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"example core zero"</code> <code class="xml color1">version</code><code class="xml plain">=</code><code class="xml string">"1.1"</code><code class="xml plain">&gt;</code></div>
<div class="line number17 index16 alt2"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">types</code><code class="xml plain">&gt;</code></div>
<div class="line number18 index17 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">fieldtype</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"string"</code> <code class="xml color1">class</code><code class="xml plain">=</code><code class="xml string">"solr.StrField"</code> <code class="xml color1">sortMissingLast</code><code class="xml plain">=</code><code class="xml string">"true"</code> <code class="xml color1">omitNorms</code><code class="xml plain">=</code><code class="xml string">"true"</code><code class="xml plain">/&gt;</code></div>
<div class="line number19 index18 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">fieldType</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"long"</code> <code class="xml color1">class</code><code class="xml plain">=</code><code class="xml string">"solr.TrieLongField"</code> <code class="xml color1">precisionStep</code><code class="xml plain">=</code><code class="xml string">"0"</code> <code class="xml color1">positionIncrementGap</code><code class="xml plain">=</code><code class="xml string">"0"</code><code class="xml plain">/&gt;</code></div>
<div class="line number20 index19 alt1"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;/</code><code class="xml keyword">types</code><code class="xml plain">&gt;</code></div>
<div class="line number21 index20 alt2"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">fields</code><code class="xml plain">&gt;</code></div>
<div class="line number22 index21 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml comments">&lt;!-- general --&gt;</code></div>
<div class="line number23 index22 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">field</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"id"</code> <code class="xml color1">type</code><code class="xml plain">=</code><code class="xml string">"string"</code> <code class="xml color1">indexed</code><code class="xml plain">=</code><code class="xml string">"true"</code> <code class="xml color1">stored</code><code class="xml plain">=</code><code class="xml string">"true"</code> <code class="xml color1">multiValued</code><code class="xml plain">=</code><code class="xml string">"false"</code> <code class="xml color1">required</code><code class="xml plain">=</code><code class="xml string">"true"</code><code class="xml plain">/&gt;</code></div>
<div class="line number24 index23 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">field</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"no"</code> <code class="xml color1">type</code><code class="xml plain">=</code><code class="xml string">"string"</code> <code class="xml color1">indexed</code><code class="xml plain">=</code><code class="xml string">"true"</code> <code class="xml color1">stored</code><code class="xml plain">=</code><code class="xml string">"true"</code> <code class="xml color1">multiValued</code><code class="xml plain">=</code><code class="xml string">"false"</code> <code class="xml plain">/&gt;</code></div>
<div class="line number25 index24 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">field</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"name"</code> <code class="xml color1">type</code><code class="xml plain">=</code><code class="xml string">"string"</code> <code class="xml color1">indexed</code><code class="xml plain">=</code><code class="xml string">"true"</code> <code class="xml color1">stored</code><code class="xml plain">=</code><code class="xml string">"true"</code> <code class="xml color1">multiValued</code><code class="xml plain">=</code><code class="xml string">"false"</code> <code class="xml plain">/&gt;</code></div>
<div class="line number26 index25 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">field</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"type"</code> <code class="xml color1">type</code><code class="xml plain">=</code><code class="xml string">"string"</code> <code class="xml color1">indexed</code><code class="xml plain">=</code><code class="xml string">"true"</code> <code class="xml color1">stored</code><code class="xml plain">=</code><code class="xml string">"true"</code> <code class="xml color1">multiValued</code><code class="xml plain">=</code><code class="xml string">"false"</code> <code class="xml plain">/&gt;</code></div>
<div class="line number27 index26 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml comments">&lt;!-- 這個 _version_ 如果拿掉會報錯 --&gt;</code></div>
<div class="line number28 index27 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">field</code> <code class="xml color1">name</code><code class="xml plain">=</code><code class="xml string">"_version_"</code> <code class="xml color1">type</code><code class="xml plain">=</code><code class="xml string">"long"</code> <code class="xml color1">indexed</code><code class="xml plain">=</code><code class="xml string">"true"</code> <code class="xml color1">stored</code><code class="xml plain">=</code><code class="xml string">"true"</code><code class="xml plain">/&gt;</code></div>
<div class="line number29 index28 alt2"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;/</code><code class="xml keyword">fields</code><code class="xml plain">&gt;</code></div>
<div class="line number30 index29 alt1"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml comments">&lt;!-- 主鍵 --&gt;</code></div>
<div class="line number31 index30 alt2"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">uniqueKey</code><code class="xml plain">&gt;id&lt;/</code><code class="xml keyword">uniqueKey</code><code class="xml plain">&gt;</code></div>
<div class="line number32 index31 alt1"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml comments">&lt;!-- 沒有設定欄位時的預設搜尋 --&gt;</code></div>
<div class="line number33 index32 alt2"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">defaultSearchField</code><code class="xml plain">&gt;name&lt;/</code><code class="xml keyword">defaultSearchField</code><code class="xml plain">&gt;</code></div>
<div class="line number34 index33 alt1"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml comments">&lt;!-- 空白串接關鍵字時預設使用 OR 或是 AND --&gt;</code></div>
<div class="line number35 index34 alt2"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">solrQueryParser</code> <code class="xml color1">defaultOperator</code><code class="xml plain">=</code><code class="xml string">"OR"</code><code class="xml plain">/&gt;</code></div>
<div class="line number36 index35 alt1"><code class="xml plain">&lt;/</code><code class="xml keyword">schema</code><code class="xml plain">&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
<li>這時候因為連結的是 MySQL，所以需要 mysql connector，假設使用的是 oracle 就要下載 ojdbc 來使用，MySQL Connector/J 到 <a href="http://dev.mysql.com/downloads/connector/j/" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">MySQL 官網<span class="wpel-icon wpel-image wpel-icon-6"></span></a>下載。選擇&nbsp;<span style="color: #0000ff;"><strong>Platform Independent</strong> </span>後下載壓縮檔，解壓縮後只需要裡面的&nbsp;<span style="color: #ff0000;"><strong>mysql-connector-java-x.x.xx-bin.jar</strong></span> 這個檔案，把這個檔案放在 solr lib 目錄下，以小蛙的環境為例，是直接放在<span style="color: #0000ff;"><strong> /var/lib/tomcat7/webapps/solr/WEB-INF/lib</strong> </span>目錄下，當 tomcat 啟動 solr 專案時就會自動被載入。</li>
<li>到這邊似乎都沒問題，在小蛙準備要重新啟動 tomcat 讓設定生效的時候，卻一直出現這樣子的錯誤
<div>
<div id="highlighter_65283" class="syntaxhighlighter  bash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">org.apache.solr.common.SolrException: RequestHandler init failure</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">...</code></div>
<div class="line number3 index2 alt2"><code class="bash plain">Caused by: org.apache.solr.common.SolrException: RequestHandler init failure</code></div>
<div class="line number4 index3 alt1"><code class="bash plain">...</code></div>
<div class="line number5 index4 alt2"><code class="bash plain">Caused by: org.apache.solr.common.SolrException: Error loading class </code><code class="bash string">'org.apache.solr.handler.dataimport.DataImportHandler'</code></div>
<div class="line number6 index5 alt1"><code class="bash plain">...</code></div>
<div class="line number7 index6 alt2"><code class="bash plain">Caused by: java.lang.ClassNotFoundException: org.apache.solr.handler.dataimport.DataImportHandler</code></div>
<div class="line number8 index7 alt1"><code class="bash plain">...</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>錯誤真的要看清楚，小蛙當時只有看到前三個，一直以為是設定檔哪裡出錯，一個一個找了好久，才發現第四個錯誤 java.lang.ClassNotFoundException，上面這些錯誤都是因為根本找不到 org.apache.solr.handler.dataimport.DataImportHandler 引起的，在網路上搜尋了一下，有一些網友分享這個檔案存在於下載回來 solr 的 dist 目錄中，可以透過在 solrconfig.xml 中設定 lib 的讀取路徑，小蛙則是把&nbsp;solr-dataimporthandler-4.5.0.jar,&nbsp;solr-dataimporthandler-extras-4.5.0.jar 這兩個 jar 直接複製到&nbsp;<span style="color: #0000ff;"><strong>/var/lib/tomcat7/webapps/solr/WEB-INF/lib </strong></span>目錄中。</p>
</li>
<li>重新啟動 tomcat 後，solr 畫面可以正常進入，左邊 Core Selector 下拉選單選到自己的 Core 後再選擇 DataImport，
<div>
<div id="highlighter_543646" class="syntaxhighlighter  text">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="text plain">// full-import : 全部匯入；delta-import : 只匯入變更部分</code></div>
<div class="line number2 index1 alt1"><code class="text plain">Command -&gt; full-import</code></div>
<div class="line number3 index2 alt2"><code class="text plain">// verbose 打勾可以看到詳細訊息</code></div>
<div class="line number4 index3 alt1"><code class="text plain">v Verbose</code></div>
<div class="line number5 index4 alt2"><code class="text plain">// 選擇剛剛設定檔新增的名稱</code></div>
<div class="line number6 index5 alt1"><code class="text plain">Entity -&gt; item</code></div>
<div class="line number7 index6 alt2"><code class="text plain">執行 Execute</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>完成後可以看到「<strong><span style="color: #008000;">Indexing completed. Added/Updated: 12701 documents. Deleted 0 documents. (Duration: 14s)</span></strong>」</p>
</li>
<li>大功告成！檢查看看是否正常匯入，點選左邊的 Query，測試 Execute Query 看看資料正不正確。</li>
</ol>
<p><strong>參考資料：</strong></p>
<ol>
<li>[Solr] Solr 學習筆記(五) 設定 Data Import Handler 直接從 MySQL 把資料匯入 @&nbsp;長島冰茶的工程師筆記<br>
<address><a href="http://wbkuo.pixnet.net/blog/post/156125771-%5Bsolr%5D-solr-%E5%AD%B8%E7%BF%92%E7%AD%86%E8%A8%98(%E4%BA%94)-%E8%A8%AD%E5%AE%9A-data-import-handler-%E7%9B%B4" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">http://wbkuo.pixnet.net/blog/post/156125771-%5Bsolr%5D-solr-%E5%AD%B8%E7%BF%92%E7%AD%86%E8%A8%98(%E4%BA%94)-%E8%A8%AD%E5%AE%9A-data-import-handler-%E7%9B%B4<span class="wpel-icon wpel-image wpel-icon-6"></span></a></address>
</li>
</ol>


<p><strong>Solr 系列文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/" data-wpel-link="internal">Solr 教學 (1) &#8211; 安裝篇</a></li><li><a href="https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/" data-wpel-link="internal">Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面</a></li><li><a href="https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/" data-wpel-link="internal">Solr 教學 (3) – 以 Remote Address Filter 限制存取</a></li><li><a href="https://noter.tw/3160/solr-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-dataimport-%e5%8c%af%e5%85%a5%e8%b3%87%e6%96%99%e5%ba%ab%e8%b3%87%e6%96%99/" data-wpel-link="internal">Solr 教學 (4) – 使用 DataImport 匯入資料庫資料</a></li><li><a href="https://noter.tw/3170/solr-%e6%95%99%e5%ad%b8-5-%e5%bb%ba%e7%ab%8b%e6%96%b0%e7%9a%84-core/" data-wpel-link="internal">Solr 教學 (5) – 建立新的 Core</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3160/solr-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-dataimport-%e5%8c%af%e5%85%a5%e8%b3%87%e6%96%99%e5%ba%ab%e8%b3%87%e6%96%99/" data-wpel-link="internal">Solr 教學 (4) – 使用 DataImport 匯入資料庫資料</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3160/solr-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-dataimport-%e5%8c%af%e5%85%a5%e8%b3%87%e6%96%99%e5%ba%ab%e8%b3%87%e6%96%99/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Solr 教學 (3) &#8211; 以 Remote Address Filter 限制存取</title>
		<link>https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/</link>
					<comments>https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Mon, 14 Oct 2013 15:32:54 +0000</pubDate>
				<category><![CDATA[Web Server]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Catalina]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[Remote Address Filter]]></category>
		<category><![CDATA[限制存取]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[cloudflare]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[web.xml]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[solr.xml]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3094</guid>

					<description><![CDATA[<p>前面&#160;Solr 教學 (1) – 安裝篇、Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面 講解了 Solr 安裝方式以及頁面安全性設定，這篇文章要記錄透過 tomcat&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/" data-wpel-link="internal">Solr 教學 (3) &#8211; 以 Remote Address Filter 限制存取</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>前面&nbsp;<a href="https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Solr 教學 (1) – 安裝篇</a>、<a href="https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面</a> 講解了 Solr 安裝方式以及頁面安全性設定，這篇文章要記錄透過 tomcat 7 內建的 Remote Address Filter 來設定允許連線 IP 的白名單。<br><span id="more-3094"></span>這個方法非常簡單，不過要注意的是 tomcat 版本不同會有不同的設定方法，這邊小蛙的環境是 Ubuntu 13.04 64bit + Solr 4.5.0 + tomcat 7，以下的方法僅適用於 tomcat 7 這個版本！</p>
<p>在測試這個功能的時候發生一個小插曲，以往設定完馬上就可以用了，這次測試時不管怎麼做都會出現 403 Forbidden 的錯誤，簡直是晴天霹靂，完全摸不著頭緒，已經設定好小蛙自己使用的 IP，還是一樣 403，最扯的是 127.0.0.1 本機測試也還是一樣的情況，在資訊這行經常會遇到靈異現象，可能要買一包綠色乖乖才可以，不過 VPS 主機在美國要怎麼辦呢 &#8230;</p>
<p>後來 &#8230; 突然想到一件事情，小蛙的網站有使用 <a href="https://www.cloudflare.com/" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">CloudFlare<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 這個服務來加快網頁速度，CloudFlare 會根據使用者的設定，比如原本的 http://wazai.net/ 假設連結到小蛙的 IP (1.2.3.4)，這個 1.2.3.4 的 IP 是在美國紐約，現在有一個日本來的使用者連結了 http://wazai.net，此刻 CloudFlare 發現日本這邊也有一個 CloudFlare 伺服器，就會將日本的使用者連結到日本的 CloudFlare 伺服器以加快網站速度。</p>
<p>就在這個 moment，真正連到小蛙伺服器的 IP 就變成 CloudFlare 日本伺服器的 IP，而不是真正日本使用者的 IP，當然這邊 CloudFlare 也有提供自訂的 Header 可以取得原始日本使用者的 IP。</p>
<p>到這邊大概懂了 &#8230; 竟然被那麼奇怪的問題卡了那麼久 &#8230; 就是小蛙在測試的時候，也是連結 http://domain:8080/solr ，但真正收到的 IP 卻不是小蛙自己本身的 IP，而是接近小蛙位置的 CloudFlare Server IP，就連在本機 127.0.0.1 的時候也是一樣的狀況 &#8230; CloudFlare 為了避免這個問題，可以在網站上設定可以直接連接的 Domain，例如：domain 透過 CloudFlare，額外新增設定 nocf.domain 來避免使用 CloudFlare。</p>
<p>上教學！有兩種設定方式，一種是 <a href="http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Remote_Address_Filter" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">Apache Tomcat 官網範例<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 提到的透過 web.xml 設定 &lt;filter&gt;，第二種是直接在 &lt;Host&gt; &lt;Context&gt; 等 Catalina Container 中設定。</p>
<h4>透過 &lt;filter&gt;</h4>
<ol>
<li>&lt;filter&gt; 過濾器在每個專案下的 web.xml 中設定，在 &lt;web-app&gt; &lt;/web-app&gt; 之間加入 &lt;filter&gt; 設定，IP 的部分設定為 1.2.3.4 改寫成 1\.2\.3\.4，IP 與 IP 之間以「|」分隔。
<div>
<div id="highlighter_286384" class="syntaxhighlighter  bash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash comments"># vim /var/lib/tomcat7/webapps/solr/WEB-INF/web.xml</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div id="highlighter_245018" class="syntaxhighlighter  xml">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="xml plain">&lt;</code><code class="xml keyword">filter</code><code class="xml plain">&gt;</code></div>
<div class="line number2 index1 alt1"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">filter-name</code><code class="xml plain">&gt;Remote Address Filter&lt;/</code><code class="xml keyword">filter-name</code><code class="xml plain">&gt;</code></div>
<div class="line number3 index2 alt2"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">filter-class</code><code class="xml plain">&gt;org.apache.catalina.filters.RemoteAddrFilter&lt;/</code><code class="xml keyword">filter-class</code><code class="xml plain">&gt;</code></div>
<div class="line number4 index3 alt1"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">init-param</code><code class="xml plain">&gt;</code></div>
<div class="line number5 index4 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">param-name</code><code class="xml plain">&gt;allow&lt;/</code><code class="xml keyword">param-name</code><code class="xml plain">&gt;</code></div>
<div class="line number6 index5 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">param-value</code><code class="xml plain">&gt;127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1&lt;/</code><code class="xml keyword">param-value</code><code class="xml plain">&gt;</code></div>
<div class="line number7 index6 alt2"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;/</code><code class="xml keyword">init-param</code><code class="xml plain">&gt;</code></div>
<div class="line number8 index7 alt1"><code class="xml plain">&lt;/</code><code class="xml keyword">filter</code><code class="xml plain">&gt;</code></div>
<div class="line number9 index8 alt2"><code class="xml plain">&lt;</code><code class="xml keyword">filter-mapping</code><code class="xml plain">&gt;</code></div>
<div class="line number10 index9 alt1"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">filter-name</code><code class="xml plain">&gt;Remote Address Filter&lt;/</code><code class="xml keyword">filter-name</code><code class="xml plain">&gt;</code></div>
<div class="line number11 index10 alt2"><code class="xml spaces">&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">url-pattern</code><code class="xml plain">&gt;/*&lt;/</code><code class="xml keyword">url-pattern</code><code class="xml plain">&gt;</code></div>
<div class="line number12 index11 alt1"><code class="xml plain">&lt;/</code><code class="xml keyword">filter-mapping</code><code class="xml plain">&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
<li>設定完成！重新啟動 tomcat。</li>
</ol>
<h4>&nbsp;</h4>
<h4>透過 &lt;Context&gt;</h4>
<ol>
<li>進入到 solr 個別設定檔，在 &lt;Context&gt; &lt;/Context&gt; 之間加入 &lt;Value /&gt;
<div>
<div id="highlighter_646750" class="syntaxhighlighter  bash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash comments"># vim /var/lib/tomcat7/conf/Catalina/localhost/solr.xml</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div id="highlighter_936594" class="syntaxhighlighter  xml">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="xml plain">&lt;</code><code class="xml keyword">Valve</code> <code class="xml color1">className</code><code class="xml plain">=</code><code class="xml string">"org.apache.catalina.valves.RemoteAddrValve"</code></div>
<div class="line number2 index1 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml color1">allow</code><code class="xml plain">=</code><code class="xml string">"127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"</code><code class="xml plain">/&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
<li>IP 設定規則同 &lt;filter&gt; 第一點。</li>
<li>設定完成！重新啟動 tomcat。</li>
</ol>


<p><strong>Solr 系列文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/" data-wpel-link="internal">Solr 教學 (1) &#8211; 安裝篇</a></li><li><a href="https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/" data-wpel-link="internal">Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面</a></li><li><a href="https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/" data-wpel-link="internal">Solr 教學 (3) – 以 Remote Address Filter 限制存取</a></li><li><a href="https://noter.tw/3160/solr-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-dataimport-%e5%8c%af%e5%85%a5%e8%b3%87%e6%96%99%e5%ba%ab%e8%b3%87%e6%96%99/" data-wpel-link="internal">Solr 教學 (4) – 使用 DataImport 匯入資料庫資料</a></li><li><a href="https://noter.tw/3170/solr-%e6%95%99%e5%ad%b8-5-%e5%bb%ba%e7%ab%8b%e6%96%b0%e7%9a%84-core/" data-wpel-link="internal">Solr 教學 (5) – 建立新的 Core</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/" data-wpel-link="internal">Solr 教學 (3) &#8211; 以 Remote Address Filter 限制存取</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Solr 教學 (2) &#8211; tomcat 7 以帳號密碼限制存取頁面</title>
		<link>https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/</link>
					<comments>https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Mon, 14 Oct 2013 14:34:34 +0000</pubDate>
				<category><![CDATA[Web Server]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[HTTP BASIC]]></category>
		<category><![CDATA[solr]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3082</guid>

					<description><![CDATA[<p>接續 Solr 教學 (1) – 安裝篇，安裝完 solr 後預設的管理頁面 http://domain:8080/solr 是不用帳號密碼就可以登入的，這樣太危險了 &#8230; tomcat 可&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/" data-wpel-link="internal">Solr 教學 (2) &#8211; tomcat 7 以帳號密碼限制存取頁面</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>接續 <a href="https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Solr 教學 (1) – 安裝篇</a>，安裝完 solr 後預設的管理頁面 http://domain:8080/solr 是不用帳號密碼就可以登入的，這樣太危險了 &#8230; tomcat 可以設定只允許特定 IP 存取頁面或目錄，這邊先記錄使用帳號密碼登入的方法！<br /><span id="more-3082"></span>小蛙從<a href="http://telligent.com/support/telligent_evolution_platform/community/w/community6/19955.securing-solr-on-tomcat.aspx" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">參考資料1<span class="wpel-icon wpel-image wpel-icon-6"></span></a>中開始學著設定，這部分還蠻容易的，存取 http://domain:8080/solr 頁面的時候，會跳出視窗要求做登入的動作，成功登入後才可以進行管理的動作，這裡發現另一個問題，如果是要做 select 的時候，用類似 HttpGet, curl, wget 這類的方法時要怎麼登入呢？參考資料1的後半段小蛙實作不出來，如果有高手有成功試出來的話，可以留言給小蛙唷！<br />這篇要記錄的東西可以達到兩件事</p>
<ol>
<li>瀏覽 http://domain:8080/solr 管理頁面時，需要做登入動作</li>
<li>可透過 http://username:password@domain:port/solr/example/select?q=*%3A*&amp;wt=json&amp;indent=true 的方式進行資料查詢</li>
</ol>
<p>直接開始：</p>
<ol>
<li>小蛙的環境是 Ubuntu 13.04 64bit + Solr 4.5.0 + tomcat 7，首先新增一個使用者角色
<div>
<div id="highlighter_893151" class="syntaxhighlighter  bash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash comments"># vim /var/lib/tomcat7/conf/tomcat-users.xml</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div id="highlighter_397543" class="syntaxhighlighter  xml">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="xml plain">&lt;</code><code class="xml keyword">role</code> <code class="xml color1">rolename</code><code class="xml plain">=</code><code class="xml string">"solr_admin"</code><code class="xml plain">/&gt;</code></div>
<div class="line number2 index1 alt1"><code class="xml plain">&lt;</code><code class="xml keyword">user</code> <code class="xml color1">username</code><code class="xml plain">=</code><code class="xml string">"your_username"</code></div>
<div class="line number3 index2 alt2"><code class="xml spaces">      </code><code class="xml color1">password</code><code class="xml plain">=</code><code class="xml string">"your_password"</code></div>
<div class="line number4 index3 alt1"><code class="xml spaces">      </code><code class="xml color1">roles</code><code class="xml plain">=</code><code class="xml string">"solr_admin"</code><code class="xml plain">/&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
<li>編輯網頁目錄下的 web.xml，在 &lt;web-app&gt; &lt;/web-app&gt; 之間加入 &lt;security-constraint&gt; 設定
<div>
<div id="highlighter_141405" class="syntaxhighlighter  bash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash comments"># vim /var/lib/tomcat7/webapps/solr/WEB-INF/web.xml</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div id="highlighter_748776" class="syntaxhighlighter  xml">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="xml plain">&lt;</code><code class="xml keyword">security-constraint</code><code class="xml plain">&gt;</code></div>
<div class="line number2 index1 alt1"><code class="xml spaces">  </code><code class="xml plain">&lt;</code><code class="xml keyword">web-resource-collection</code><code class="xml plain">&gt;</code></div>
<div class="line number3 index2 alt2"><code class="xml spaces">    </code><code class="xml plain">&lt;</code><code class="xml keyword">web-resource-name</code><code class="xml plain">&gt;Solr authenticated application&lt;/</code><code class="xml keyword">web-resource-name</code><code class="xml plain">&gt;</code></div>
<div class="line number4 index3 alt1"><code class="xml spaces">    </code><code class="xml plain">&lt;</code><code class="xml keyword">url-pattern</code><code class="xml plain">&gt;/*&lt;/</code><code class="xml keyword">url-pattern</code><code class="xml plain">&gt;</code></div>
<div class="line number5 index4 alt2"><code class="xml spaces">  </code><code class="xml plain">&lt;/</code><code class="xml keyword">web-resource-collection</code><code class="xml plain">&gt;</code></div>
<div class="line number6 index5 alt1"><code class="xml spaces">  </code><code class="xml plain">&lt;</code><code class="xml keyword">auth-constraint</code><code class="xml plain">&gt;</code></div>
<div class="line number7 index6 alt2"><code class="xml spaces">    </code><code class="xml plain">&lt;</code><code class="xml keyword">role-name</code><code class="xml plain">&gt;solr_admin&lt;/</code><code class="xml keyword">role-name</code><code class="xml plain">&gt;</code></div>
<div class="line number8 index7 alt1"><code class="xml spaces">  </code><code class="xml plain">&lt;/</code><code class="xml keyword">auth-constraint</code><code class="xml plain">&gt;</code></div>
<div class="line number9 index8 alt2"><code class="xml plain">&lt;/</code><code class="xml keyword">security-constraint</code><code class="xml plain">&gt;</code></div>
<div class="line number10 index9 alt1"><code class="xml plain">&lt;</code><code class="xml keyword">login-config</code><code class="xml plain">&gt;</code></div>
<div class="line number11 index10 alt2"><code class="xml spaces">  </code><code class="xml plain">&lt;</code><code class="xml keyword">auth-method</code><code class="xml plain">&gt;BASIC&lt;/</code><code class="xml keyword">auth-method</code><code class="xml plain">&gt;</code></div>
<div class="line number12 index11 alt1"><code class="xml spaces">  </code><code class="xml plain">&lt;</code><code class="xml keyword">realm-name</code><code class="xml plain">&gt;solr&lt;/</code><code class="xml keyword">realm-name</code><code class="xml plain">&gt;</code></div>
<div class="line number13 index12 alt2"><code class="xml plain">&lt;/</code><code class="xml keyword">login-config</code><code class="xml plain">&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
<li>重新啟動 tomcat，連到 http://domain:8080/solr 就可以看到要求登入畫面
<div>
<div id="highlighter_616372" class="syntaxhighlighter  bash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash comments"># service tomcat7 restart</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
<li>從 solr 管理頁面得到的 select 網址，在前面加上帳號:密碼也可以正常取得資料，如下。
<div>
<div id="highlighter_167393" class="syntaxhighlighter  text">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="text plain"><a href="http://username:password@domain:port/solr/example/select?q=" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">http://username:password@domain:port/solr/example/select?q=<span class="wpel-icon wpel-image wpel-icon-6"></span></a>*%3A*&amp;wt=json&amp;indent=true</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
</ol>
<p>下一篇 <a href="https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Solr 教學 (3) – 以 Remote Address Filter 限制存取</a> 將記錄怎麼使用 tomcat 7 內建的 Remote Address Filter 以 IP 的方式設定白名單或黑名單。</p>


<p><strong>Solr 系列文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/" data-wpel-link="internal">Solr 教學 (1) &#8211; 安裝篇</a></li><li><a href="https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/" data-wpel-link="internal">Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面</a></li><li><a href="https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/" data-wpel-link="internal">Solr 教學 (3) – 以 Remote Address Filter 限制存取</a></li><li><a href="https://noter.tw/3160/solr-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-dataimport-%e5%8c%af%e5%85%a5%e8%b3%87%e6%96%99%e5%ba%ab%e8%b3%87%e6%96%99/" data-wpel-link="internal">Solr 教學 (4) – 使用 DataImport 匯入資料庫資料</a></li><li><a href="https://noter.tw/3170/solr-%e6%95%99%e5%ad%b8-5-%e5%bb%ba%e7%ab%8b%e6%96%b0%e7%9a%84-core/" data-wpel-link="internal">Solr 教學 (5) – 建立新的 Core</a></li></ul>



<h2 class="para wp-block-heading">參考資料</h2>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="http://telligent.com/support/telligent_evolution_platform/community/w/community6/19955.securing-solr-on-tomcat.aspx" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">Securing Solr on Tomcat @ Telligent Community 6 <span class="wpel-icon wpel-image wpel-icon-6"></span></a></li><li><a href="http://stackoverflow.com/questions/2837401/tomcat-url-authentication-e-g-https-userpasswordapp-wibble-com" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">Tomcat URL Authentication e.g: https://user:password@app.wibble.com @ stackoverflow<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/" data-wpel-link="internal">Solr 教學 (2) &#8211; tomcat 7 以帳號密碼限制存取頁面</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Solr 教學 (1) &#8211; 安裝篇</title>
		<link>https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/</link>
					<comments>https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Mon, 14 Oct 2013 13:55:32 +0000</pubDate>
				<category><![CDATA[Web Server]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[solr.xml]]></category>
		<category><![CDATA[solrconfig.xml]]></category>
		<category><![CDATA[安裝心得]]></category>
		<category><![CDATA[教學]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[solr]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3084</guid>

					<description><![CDATA[<p>Solr 真是一個不錯的東西，想說架一個來玩，安裝時花了很多時間，網路上大部分查到的都是直接用 jetty 來執行，問了同事之後得知可以把 example 下的 solr.war 檔案直接拉到 tom&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/" data-wpel-link="internal">Solr 教學 (1) &#8211; 安裝篇</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>

Solr 真是一個不錯的東西，想說架一個來玩，安裝時花了很多時間，網路上大部分查到的都是直接用 jetty 來執行，問了同事之後得知可以把 example 下的 solr.war 檔案直接拉到 tomcat 目錄下，但怎麼試就是沒辦法，這篇記錄 solr 與 tomcat 搭配的過程。

</p>



<span id="more-3084"></span>



<p>花了不少時間，怎麼 war 檔不是直接拉到 tomcat 目錄下就可以使用 &#8230; 這安裝也太麻煩了，先記錄下來，如果有什麼意外要再灌一次才知道怎麼弄。苦痛的記憶開始 &#8230; 小蛙的環境是：Ubuntu 13.04 64bit + Solr 4.5.0 + tomcat 7。 </p>



<p>安裝 tomcat 7 </p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">apt-get install tomcat7</pre>



<p>下載 solr 4.5，假設放在 /usr/src 下 </p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">cd /usr/src
wget http://apache.stu.edu.tw/lucene/solr/4.5.0/solr-4.5.0.zip</pre>



<p>解壓縮 (如果沒有 unzip 就 # apt-get install unzip，不想安裝的話也可以到 這邊下載 tgz 版本)</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">unzip solr-4.5.0.zip</pre>



<p>複製需要的 war 檔案到 tomcat 目錄下 </p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">cd solr-4.5.0
cp ./example/webapps/solr.war /var/lib/tomcat7/webapps/solr.war</pre>



<p>建立 solr.xml 設定檔，底下的 /opt/solr 是 solr 的資料放置目錄 </p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">vim /var/lib/tomcat7/conf/Catalina/localhost/solr.xml</pre>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;Context path="/solr" docBase="/var/lib/tomcat7/webapps/solr.war" crossContext="true" privileged="true" antiResourceLocking="false"&gt;&nbsp;&nbsp;
  &lt;Environment name="solr/home" type="java.lang.String" value="/opt/solr" override="true" /&gt;
&lt;/Context&gt;</pre>



<p>建立 solr 資料目錄，並新增 solr.xml 設定檔 </p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">mkdir -p /opt/solr
vim /opt/solr/solr.xml</pre>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;solr persistent="true"&gt;&nbsp;&nbsp;&nbsp;&nbsp;
  &lt;cores adminPath="/admin/cores"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  &lt;core name="example" instanceDir="example" /&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  &lt;!-- adding extra cores!
  &lt;core name="another_example" instanceDir="another_example_directory" /&gt;--&gt;
  &lt;/cores&gt;
&lt;/solr&gt;</pre>



<p>更改擁有者及群組 </p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">chown -R tomcat7:tomcat7 /opt/solr/example</pre>



<p>複製必須的設定檔 </p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">cp /usr/src/solr-4.5.0/example/solr/collection1/conf/*.txt /opt/solr/example/conf/
cp /usr/src/solr-4.5.0/example/multicore/core0/conf/*.xml /opt/solr/example/conf/</pre>



<p>增加以下設定 (參考資料1，先照著做) </p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">vim /opt/solr/example/conf/solrconfig.xml</pre>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">&lt;requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy"&gt;&lt;/requestHandler&gt;
&lt;requestHandler name="/admin/luke" class="org.apache.solr.handler.admin.LukeRequestHandler" /&gt;
&lt;requestHandler name="/spell" class="solr.SearchHandler" startup="lazy"&gt;
	&lt;lst name="defaults"&gt;
		&lt;str name="spellcheck.onlyMorePopular"&gt;false&lt;/str&gt;
		&lt;str name="spellcheck.extendedResults"&gt;false&lt;/str&gt;
		&lt;str name="spellcheck.count"&gt;1&lt;/str&gt;
	&lt;/lst&gt;
	&lt;arr name="last-components"&gt;
		&lt;str&gt;spellcheck&lt;/str&gt;
	&lt;/arr&gt;
&lt;/requestHandler&gt;
&lt;searchComponent name="suggest" class="solr.SpellCheckComponent"&gt;
	&lt;lst name="spellchecker"&gt;
		&lt;str name="name"&gt;suggest&lt;/str&gt;
		&lt;str name="classname"&gt;org.apache.solr.spelling.suggest.Suggester&lt;/str&gt;
		&lt;str name="lookupImpl"&gt;org.apache.solr.spelling.suggest.tst.TSTLookup&lt;/str&gt;
		&lt;str name="field"&gt;title&lt;/str&gt;
		&lt;str name="buildOnCommit"&gt;true&lt;/str&gt;
	&lt;/lst&gt;
&lt;/searchComponent&gt;
&lt;requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler"&gt;
	&lt;lst name="defaults"&gt;
		&lt;str name="spellcheck"&gt;true&lt;/str&gt;
		&lt;str name="spellcheck.dictionary"&gt;suggest&lt;/str&gt;
		&lt;str name="spellcheck.count"&gt;10&lt;/str&gt;
	&lt;/lst&gt;
	&lt;arr name="components"&gt;
		&lt;str&gt;suggest&lt;/str&gt;
	&lt;/arr&gt;
&lt;/requestHandler&gt;</pre>



<p>這應該是一種報應，小蛙設定 Eclipse RSE 時不小心做了刪除動作，結果就把整個 tomcat/webapps 全刪了 &#8230; 照著上面的步驟重做一次後發現漏掉這一步 = =，把執行 solr 需要的 JAR 加入到 lib 資料夾中 </p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">cp /usr/src/solr-4.5.0/example/lib/ext/* /var/lib/tomcat7/webapps/solr/WEB-INF/lib/</pre>



<p>重新啟動 tomcat </p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">service tomcat7 restart</pre>



<p>到這邊大致上就完成囉！如果沒有改 tomcat port 的話，http://your_domain:8080/solr 就可以連到 solr 囉！裡面只有剛剛複製的 collection1，之後開始新增 / 修改 / 刪除 資料時，再把過程記錄下來！ </p>



<p><strong>Solr 系列文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/" data-wpel-link="internal">Solr 教學 (1) &#8211; 安裝篇</a></li><li><a href="https://noter.tw/3082/solr-%e6%95%99%e5%ad%b8-2-tomcat-7-%e4%bb%a5%e5%b8%b3%e8%99%9f%e5%af%86%e7%a2%bc%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96%e9%a0%81%e9%9d%a2/" data-wpel-link="internal">Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面</a></li><li><a href="https://noter.tw/3094/solr-%e6%95%99%e5%ad%b8-3-%e4%bb%a5-remote-address-filter-%e9%99%90%e5%88%b6%e5%ad%98%e5%8f%96/" data-wpel-link="internal">Solr 教學 (3) – 以 Remote Address Filter 限制存取</a></li><li><a href="https://noter.tw/3160/solr-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-dataimport-%e5%8c%af%e5%85%a5%e8%b3%87%e6%96%99%e5%ba%ab%e8%b3%87%e6%96%99/" data-wpel-link="internal">Solr 教學 (4) – 使用 DataImport 匯入資料庫資料</a></li><li><a href="https://noter.tw/3170/solr-%e6%95%99%e5%ad%b8-5-%e5%bb%ba%e7%ab%8b%e6%96%b0%e7%9a%84-core/" data-wpel-link="internal">Solr 教學 (5) – 建立新的 Core</a></li></ul>



<h2 class="para wp-block-heading"><strong>參考資料：</strong> </h2>



<ol class="my-li bg-darkblue wp-block-list"><li>How to install SOLR 4.0 Cloud with Tomcat 7 on Ubuntu 12.04 LTS @ nodeX<br><a href="http://www.nodex.co.uk/article/10-12-12/how-to-install-solr-4-0-cloud-with-tomcat-7-on-ubuntu-12-04-lts" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">http://www.nodex.co.uk/article/10-12-12/how-to-install-solr-4-0-cloud-with-tomcat-7-on-ubuntu-12-04-lts<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li></ol>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/" data-wpel-link="internal">Solr 教學 (1) &#8211; 安裝篇</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3084/solr-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d%e7%af%87/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
