一、命令:
1、启动solr。
>>cd bin
>>./solr start –e techproducts
2、停止solr。
>>./solr stop
3、启动后的管理界面。
http://192.168.1.100:8983/solr
4、对实例techproducts重新进行索引。首先需要去到post.jar所在的目录,然后执行提交操作
>> cd example/exampledocs
>> java –Dc=techproducts -jar post.jar *.xml
5、查看SimplePostTool的使用方法
java –jar example/solr/post.jar -help
二、查询:
1、查找cat字段中包含hard drive字符串的文档。注意:一个字段的多个值用+号连接。wt表示返回的数据格式,indent=true表示对返回的字符串进行格式化展示。
http://192.168.1.100:8983/solr/techproducts/select?q=cat:“hard+drive”&wt=json&indent=true
2、查找字段inStock的值为true,并且字段popularity的值大于等于6的文档。注意:多个字段的并查询,需要用AND进行标识,用+号连接,范围过滤用[ ]号。
http://192.168.1.100:8983/solr/techproducts/select?q=+inStock:true+AND+popularity:[6+TO+*]&wt=json&indent=true
3、查询包含ipod字符串的文档,qf表示查询的字段范围,即这三个字段的任何一个字段值包含ipod的文档都会被查询出来。fl表示返回的字段:*表示返回所有字段,score为分数信息。name后面的^3表示:如果name字段值匹配到ipod字符串,则提高对应文档的相关性。
http://192.168.1.100:8983/solr/techproducts/select?q=ipod&defType=edismax&qf=name^3+manu+cat&fl=*,score&wt=json&indent=true
三、schema.xml文档结构:
1、字段定义用到的属性。
name:必须。字段名称
type:必须。字段类型
indexed:表示该字段是否能够被solr索引到
stored:表示该字段值是否能够存储到solr
multiValued:表示该字段是否可以存储多个值
default:字段默认值
required:如果为true,则值不能为空,否则solr将无法索引到
2、动态字段定义:
标签名为dynamicField。
name:name属性的值通常用通配符定义,例如:<dynamicField name="*_dt" type="date" indexed="true" stored="true"/>
sortMissingFirst:表示是否将没有该字段的文档排列在搜索结果的前面。
sortMissingLast:表示是否将没有该字段的文档排列在搜索结果的后面。(如果sortMissingFirst和sortMissingLast都是false,则以什么作为默认排序?)
omitNorms:如果不想让该字段值的长度影响到文档的分数,或者这个字段不会用来作为分数的影响因素的,或者不考虑加快索引时间,那么把值设为true。
omitPositions:设置为true表示忽略位置信息,可以节省一点空间,但该字段将不可以被用来查询。
omitTermFreqAndPositions:设置为true表示忽略频率和位置信息,可以节省一点空间,但该字段将不可以被用来作为分数因子和查询。
termVectors:对于有大量文本信息的字段,此值设置为true可以提高搜索性能,节省搜索时间。这个属性还有两个附带属性:termPositions、termOffsets。
positionIncrementGap:对于multiValued为true的字段,用来限制与之匹配的字符串字数,不符合该字数的字符串将直接忽略掉。
3、用于标识文档唯一性的标签:
<uniqueKey>id</uniqueKey>
4、设置默认的搜索字段和搜索解析器:
<defaultSearchField>text</defaultSearchField>
<solrQueryParser defaultOperator="AND"/>
5、拷贝字段:<copyField source="r_name" dest="r_name_sort" maxChars="20" />
source是一个字段名称,dest也是一个字段名称。表示将一个字段的内容拷贝到另一个字段的值当中。
??什么情况下才使用拷贝字段:
有些场景需要单独的索引值,比如排序,为什么?;
用来将多个字段值拷贝到一个公共的字段里面去,搜索内容时只需在这个公共的字段里面查找从而提高搜索性能,但是分数会有所丢失。
6、定义字段类型:<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" />
7、字段类型的定义:
TrieIntField:精确度为0,通常展示为int,大部分整形都是采用这种类型。
TrieIntField:精确度大于0,通常展示为tint,在涉及到数字范围查询时,设置为这种类型可以提高查询的性能。
IntField:通常展示为pint,是一个遗留的类型,后续会被移除。用来将数字编码成一个字符串。
SortableIntField:通常展示为sint,后续会被移除。
CurrencyField:货币字段。格式:<fieldType name="currency" class="solr.CurrencyField" precisionStep="8" defaultCurrency="USD" currencyConfig="currency.xml" />
currency.xml为对应的配置文件:包含货币之间的汇率对应关系。
ExternalFileField:用来存储经常变化的字段,它是从纯文本里面去读数据的,而不是从索引里面去读,所以字段值变化时不需要重新进行索引。
EnumField:枚举类型的字段。包含两个属性:enumsConfig,用来配置枚举值;enumName,字段类型的名称。
四、slorconfig.xml文档配置。
multipartUploadLimitInKB:限制上传的最大数据量。
enableRemoteStreaming:是否允许上传远程流数据。
五、数据的提交
1、指定文件路径,进行数据文档的提交:
>>curl http://192.168.1.100:8983/solr/techproducts/update -F stream.file=/home/zhengxiangwen/mydata/ipod_other.xml
2、也可以知道URL地址,进行数据提交:
>>curl http://192.168.1.100:8983/solr/techproducts/update -F stream.url=具体的地址
3、如果文档内容很少,也可以直接指定内容,假如内容是<commit />,注意<commit />前面需要留一个空格:
>>curl http://192.168.1.100:8983/solr/mbartists/update -F stream.body=' <commit />'
4、指定文件的名称,进行数据提交,需在文件所在的目录下执行:
>> curl http://192.168.1.100:8983/solr/mbartists/update -H 'Content-type:text/xml; charset=utf-8' --data-binary @artists.xml
怎么查看提交的数据文档?
数据提交后要重新进行索引吗?
六、数据的删除
1、第一种文档格式,将把下面这些id对应的文档删除
<delete><id>Artist:11604</id><id>Artist:11603</id></delete>
2、第二种文档格式,将把满足条件的文档删除,即timestamp的值在这个范围内的文档。
<delete><query>timestamp:[* TO NOW-12HOUR]</query></delete>