schema各个field和fieldType的基本解释

http://www.cnblogs.com/cy163/archive/2009/09/26/1574393.html

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/lucene/solr/trunk/example/solr/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 chenlb2008Aug 16, 2009
英文小写,好办,用 <filter class="solr.LowerCaseFilterFactory"/> 就行,详情请
看:http://blog.chenlb.com/2009/04/solr-chinese-segment-mmseg4j-use-demo.html

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

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

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

以下内容是从网上找到的

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

Solr schema.xml 的介紹

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介紹
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 该错误信息提示在给定的架构类型int64上无效的Java对象,因为它强制将字符串类型的Java对象分配给字段。这通常意味着在使用int64类型的字段时,错误的Java对象被分配给该字段。这可能是由于字段类型与实际数据类型不匹配而导致的。为了解决此问题,您需要检查您的代码和架构定义,确认字段和类型之间的匹配是否正确。如果存在任何错误,请更正这些错误,并重新运行代码以确保不会再次出现此错误。您还可以查看其他可能存在的数据类型转换错误,以确保代码和架构定义之间的数据类型一致性。如果您不确定如何解决这个问题,请考虑查看Java文档,参考有关Java对象以及数据类型转换的文档。 ### 回答2: 这个错误信息是指在使用Java创建schema type int64的时候,将字符串类型的数据传入了该schema中。实际上,int64是一种整数类型,在Java中对应的是long类型,而非字符串类型。 通常,出现这种错误会导致程序无法运行或运行出现问题。为了解决这个错误,我们需要找到程序中出现这个错误的地方,然后检查传入数据的类型是否与该schema要求的类型一致。如果数据类型不一致,就需要对传入的数据进行类型转换,将其转换为正确的数据类型再传入该schema中。 此外,在编程时也应该尽量避免出现这种错误。我们可以使用编译器的类型检查功能来确保程序中不会出现类型不匹配的问题,或者在程序中添加相关的异常处理机制,当出现类型不匹配时能够及时抛出异常并给予提示。 总之,处理这个错误需要对程序中出现该错误的原因进行分析,并进行相应的调整和修改。只有在编程过程中注重细节,才能够避免出现这种类型不匹配的问题。 ### 回答3: 这个错误信息是Java语言中的一种错误提示。它由一个Java程序生成,提示开发者他们在尝试使用一个不正确的Java对象类型来赋值给一个int64类型的变量时,出现了一个错误。 Java中有很多基本数据类型,比如int、float、long等等。这些基本数据类型都具有不同的数据范围和取值范围。int64即为long类型,它能够表示的范围为-9223372036854775808到9223372036854775807。无效的Java对象是指一个没有被正确声明或定义的Java对象,或者一个Java对象类型与需要的int64类型不匹配的情况。 通常情况下,这种错误信息是由于变量名称或变量类型错误引起的。编程时需要遵循严格的变量类型规则,并确保所定义的变量被正确地赋值。对于这种错误,通常要检查代码,找到错误所在的语句,确认变量类型是否正确,并确认变量被正确地赋值。 如果遇到这种情况,在处理该错误之前,开发者应该尽可能了解Java语言中各种数据类型的特点和用法,以便更好地避免类似的错误。同时,使用工具来帮助发现和识别这种错误也是非常有帮助的。最后,进行充分的测试和验证,确保代码没有错误,并且符合预期的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值