SOLR安装与配置

2019-03-27 01:00|来源: 网路

apache-solr-3.2.0基于TOMCAT安装 以下是windows的安装方法,与linux安装是一样的

修改tomcat的server.xml文件

<Connector port=”8983″ protocol=”HTTP/1.1″ connectionTimeout=”20000″ redirectPort=”8443″ URIEncoding=”UTF-8″ />

增加tomcat\conf\Catalina\localhost\solr.xml文件

<?xml version=”1.0″ encoding=”utf-8″?>
<Context docBase=”F:\root\apache-solr-3.2.0\dist\apache-solr-3.2.0.war” debug=”0″ crossContext=”true”>
<Environment name=”solr/home” type=”java.lang.String” value=”F:\root\apache-solr-3.2.0\example\solr” override=”true”/>
</Context>

访问地址http://localhost:8983/solr/admin/即可进入SOLR的查询页面

SOLR 中 Schema.xml 的filedType 的一些属性的理解

1. dynamicField 的作用是什么?

如果你需要在schema.xml文件中的<field> ......</field>部分定义多个<field>(math_score,chinese_score,english_score,....),而恰好这些<field>的type属性又相同(type="integer"),那么就可以借助 dynamicField 用一个句子完成

这样,在一个document中,就可以使用math_score,chinese_score,english_score 这些字段名,虽然在schema.xml文件中并未对它们进行一一定义。

dynamicField就是動態欄位, 要是你有太多欄位無法一一設定,你可以用dynamicField處理像下面這第一個dynamicField就是說, 所有欄位是以 _i做結尾的 (如 a_i, sss_i, id_i等等)都套用這個設定.

<dynamicField name="*_i" type="integer" indexed="true" stored="true"/>
<dynamicField name="*_t" type="text" indexed="true" stored="true"/>
<dynamicField name="*_f" type="float" indexed="true" stored="true"/>
<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
<dynamicField name="*_d" type="date" indexed="true" stored="true"/>
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
<dynamicField name="*_ri" type="sint" indexed="true" stored="true"/>
<dynamicField name="*_rf" type="sfloat" indexed="true" stored="true"/>
<dynamicField name="*_facet" type="string" indexed="true" stored="true"/>
</fields>

2. sortMissingLast 和 sortMissingFirst对<field>的属性之一。只在对该<field>进行排序时,才起作用。


sortMissingLast = true时,那些在该<field>上没有值的documents将被排在那些在该<field>上有值的documents之后。


sortMissingFirst = true时的情况正好相反。


如果两者都设为false,则使用Lucene的排序。

3. positionIncrementGap=100 只对 multiValue = true 的fieldType有意义。

http://svn.apache.org/repos/asf/ ... olr/conf/schema.xml

Suppose a document has a multi-valued "author" field. Like this:

author: John Doe
author: Bob Smith

With a position increment gap of 0, a phrase query of "doe bob" would
be a match. But often it is undesirable for that kind of match across
different field values. A position increment gap controls the virtual
space between the last token of one field instance and the first token
of the next instance. With a gap of 100, this prevents phrase queries
(even with a modest slop factor) from matching across instances.

4. omitNorms

什么是Norm,现在还不懂????

5. LowerCaseFilterFactory的作用。

例如Kobe Bryant在分词后 kobe 不能搜索到结果 Kobe可以,虽然这个是中文分词
法,但经常有中英混输的情况,如果在输入英文后,查不到结果,也是比较失望的,
另外我看了你的源代码,建议在词库的引进上采用单例模式,在web应用上会比较好,
谢谢你的帮助,另外我看了solol的mmseg的接口比较不错,你是否有意看看,另外再
次感谢你的solr分词

Comment 1 by chenlb2008, Aug 16, 2009 英文小写,好办,用 <filter class="solr.LowerCaseFilterFactory"/> 就行,详情请
看:http://blog.chenlb.com/2009/04/s ... seg4j-use-demo.html

solol 基本没看,我只是怕看了会影响我的设计思路。

也准备实现 http://chenlb.javaeye.com/blog/439843 提到的一些功能。

多谢你的关注。希望继续提出你的看法。

以下内容是从网上找到的

=====================

Solr schema.xml 的介紹

Tuesday, 1. April 2008, 07:23:25

solr

原來我是打算將Solr wiki裡的介紹直接翻譯成中文, 後來寫一寫覺得, 翻譯的內容太複雜, 很難懂. 所以在這裡我就直接拿一個schema.xml範例來介紹好了. 希望能幫助大家了解schema.xml

<?xml version="1.0" ?>
The Solr schema file. This file should be named "schema.xml" and should be in the conf directory under the solr home (i.e. ./solr/conf/schema.xml by default) or located where the classloader for the Solr webapp can find it.

For more information, on how to customize this file, please see… wiki.apache.org/solr/SchemaXml
<schema name="solr" version="1.1">

資料型態, 你的資料可能要分很多不同型態做資料建置以便solr引擎做檢索, 就像一般資料庫一樣, 要對存入的資料做型態分類. 以下有string, boolean, integer, long, float, double 等等的資料型態, 就依你的須求做設定. 每一個fieldtype 都有幾個參數可設定, 其中name就是你給這個fieldtype的名子, 你可以隨你的方便取名. class是solr用的,就不可以亂取, 要針對你這個fieldtype的資料型態來告訴solr這個fieldtype裡的資料是什麼樣類型的資料,如 integer, text, string, long等等.
後面的sortMissingLast, omitNorms等設定你可以參考solr wiki schemalXml的介紹, 再依你的須求使用. 請參考下列範例.

<types>
<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
<fieldtype name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
<fieldtype name="integer" class="solr.IntField" omitNorms="true"/>
<fieldtype name="long" class="solr.LongField" omitNorms="true"/>
<fieldtype name="float" class="solr.FloatField" omitNorms="true"/>
<fieldtype name="double" class="solr.DoubleField" omitNorms="true"/>
<fieldtype name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>
<fieldtype name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/>
<fieldtype name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/>
<fieldtype name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/>
<fieldtype name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/>

如果是TextField的資料型態, 你可以用不同的Analyzer, Tokenizer, Filter對這個fieldtype的資料做處理. 像是中文切詞, 刪除前後空白, 或同義詞等等. 可依你的須求使用. 請參考下列範例.

<fieldtype name="text_ws" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
</analyzer>
</fieldtype>

<fieldtype name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>

<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldtype>

<fieldtype name="textTight" class="solr.TextField" positionIncrementGap="100" >
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldtype>
</types>


設置好資料fieldType的型態後, 就是將這些fieldType套入對應的document fields. 只能多不能少. 也就是說假設你有一個document裡有 id, name, default等資料, 你的schema.xml不可以只有id, default這兩個field. 你一定要還要有name這個field. 但是你schema.xml裡若有id, name, defualt, text這四個欄位, 你的document卻可以只有id, default這兩個欄位.

<fields>
<field name="id" type="string" indexed="true" stored="true"/>

上面這個欄位(field)是給你document裡的id欄用, 型態為string, 要index, 也要儲存在你的資料庫裡

<field name="default" type="text" indexed="true" stored="false" multiValued="true"/>
<field name="name" type="text" indexed="true" stored="false" multiValued="true"/>

dynamicField就是動態欄位, 要是你有太多欄位無法一一設定,你可以用dynamicField處理像下面這第一個dynamicField就是說, 所有欄位是以 _i做結尾的 (如 a_i, sss_i, id_i等等)都套用這個設定.

<dynamicField name="*_i" type="integer" indexed="true" stored="true"/>
<dynamicField name="*_t" type="text" indexed="true" stored="true"/>
<dynamicField name="*_f" type="float" indexed="true" stored="true"/>
<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
<dynamicField name="*_d" type="date" indexed="true" stored="true"/>
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
<dynamicField name="*_ri" type="sint" indexed="true" stored="true"/>
<dynamicField name="*_rf" type="sfloat" indexed="true" stored="true"/>
<dynamicField name="*_facet" type="string" indexed="true" stored="true"/>
</fields>

uniqueKey就像一般database的primary key一樣, 也就是說整個資料庫裡的每一筆資料的id欄位不可以與另一筆資料的id欄位有相同值.

<uniqueKey>id</uniqueKey>

defaultSearchField就是你在做query搜尋時若不指定特定欄位做檢索時, Solr就會只查這個欄位.

<defaultSearchField>default</defaultSearchField>

copyField是用來複製你一個欄位裡的值到另一欄位用. 如你可以將name裡的東西copy到default裡, 這樣solr做檢索時也會檢索到name裡的東西.

<copyField source="name" dest="default"/>


這裡defaultOperator設為 "AND", 就是說當你輸入的查尋詞句有空白時 ex. "遠東 餐廳", Solr搜尋解析器會當做你的query指令為"遠東AND餐廳". 若是設為 "OR" 就會變成"遠東OR餐廳".

<solrQueryParser defaultOperator="AND"/>
</schema>

這就是一個簡單的schema.xml介紹

SOLR安装路径
/home/download/apache-solr-3.2.0
开源PHP_SOLR类路径
/mnt/webroot/SolrPhpClient
TOMCAT安装路径
/usr/local/apache-tomcat-6.0.32

启动TOMCAT
/usr/local/apache-tomcat-6.0.32/bin/startup.sh
停止TOMCAT
/usr/local/apache-tomcat-6.0.32/bin/shutdown.sh


转自:http://www.cnblogs.com/zcy_soft/archive/2011/06/25/2090140

相关问答

更多
  • tomcat配置数据源solr使用数据源 1、tomcat中配置数据源(注:需要拷贝jdbc相关jar包到tomcat中。tomcat6.x/lib目录下,注意tomcat6.0以下的版本在tomcat5.x/common/lib/目录下) 在server.xml文件,找到“Engine-> Host -> Context”,在其下面配置主要针对某一项目的数据源使用。 在context.xml文件,找到“Context”,在其下面配置可以让所有项目使用。 在Context下面配置数据源如下: 数据源相关参数 ...
  • tomcat配置数据源solr使用数据源 1、tomcat中配置数据源(注:需要拷贝jdbc相关jar包到tomcat中。tomcat6.x/lib目录下,注意tomcat6.0以下的版本在tomcat5.x/common/lib/目录下) 在server.xml文件,找到“Engine-> Host -> Context”,在其下面配置主要针对某一项目的数据源使用。 在context.xml文件,找到“Context”,在其下面配置可以让所有项目使用。 在Context下面配置数据源如下: & ...
  • 我解决了这个问题,它是关于Cygwin文件夹的文件权限,Solr colud不创建文件夹。 我手动更改了访问权限。 I solved the problem, it was about file permissions at Cygwin folder, the Solr coludn't create folders. I changed manually the access rights.
  • 如果您尝试自行下载存档,则需要安装phpize。 如果您安装了phpize ,请手动执行此操作: pecl download solr-beta tar xvzf solr-2.0.0.tgz cd solr-2.0.0 phpize ./configure make sudo make install # add extension=solr.so to your php.ini / distribution extension loader ..这应该与pecl install solr-beta , ...
  • 您需要在系统或任何服务器实例中运行Solr服务 ,然后您才能连接并在Solr上执行某些操作。 在maven中指定依赖关系仅对连接到Solr并在Solr服务上执行读/写操作很有用。 例如,如果我们将它与任何数据库系统进行比较,那么您的数据库服务器正在运行某些位置,并且您在应用程序中使用任何jdbc驱动程序来对该RDBMS执行CRUD操作。 您可以按照以下步骤安装和运行Solr 确保已安装Java 从http://lucene.apache.org/solr/下载Solr 将Solr分发存档解压缩到目录 通过发 ...
  • 从错误看来,entity_type是核心模式中定义的必填字段。 提供给solr的数据似乎没有entity_type字段,因此文档无法编入索引。 Thanks all, I got it working now. the only issue was schema.xml. There is another Drupal 7 site running on same server which, so i need to change schema.xml. D7 and D6 schema files are ...
  • 最新的Solr作为独立黑匣子运行。 不要看Tomcat信息的古老教程,它们不再有用。 这是通过.NET客户端连接到它的一个单独问题。 对于客户端部分,SolrNet的源代码版本更新。 它应该与最新的Solr一起工作,主要问题是Solr的URL现在必须包含集合名称,所以http:// localhost:8983 / solr / collectionname 。 检查参数以设置核心或集合或类似。 还有Solr Express,你可能想看看。 Latest Solr runs as standalone bl ...
  • 我不确定,这会对您有所帮助,但请在SolrCloud 5和Zookeeper配置上传中进行交叉检查 可以使用的某些命令如下。 使用所有conf文件创建conf目录 从其中一个节点/opt/myname/solr-5.2.1/bin/solr create -c my_collection -d /opt/myname/solr-5.2.1/server/solr/myconf/conf -n my_colln_cfg -shards运行2 -relicationFactor 2 其他一些有用的链接如下:ht ...
  • 当您以Solr用户身份运行时,必须让solr用户访问您要编写配置的目录。 如果这是/opt/solr ,则可以通过发出chown命令递归地更改目录的所有者和所有包含的文件: chown -R solr.solr /opt/solr 这假设您的系统上还有一个名为solr的组。 如果您没有solr组,请使用另一个合适的组,或将最后一个.solr保留在命令之外。 When you're running as the Solr user, you'll have to give the solr user acc ...
  • 你不需要做任何特别的事情。 只需为您的发行版获取Tesseract OCR设置并将其安装在系统上。 确保您的PATH变量具有Tesseract主目录的条目,并且设置了TESSDATA_PREFIX变量,并且还指向Tesseract主目录。 重新启动Solr,你很高兴。 通过/update/extract处理程序将文档推送到索引时,您应该能够看到OCR组件。 默认情况下,Tesseract仅附带英文模型。 从这里获取其他语言的模型。 You don't need to do anything special. ...