琦少

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

solr管理界面解释

当 Solr 在 Tomcat 服务器上部署成功后,我们可以登录 Solr 网页版的管理界面进行基本的操作。

一、首先来了解一下 Solr 页面各个功能模块的基本功能是什么?这里主要包括 Dashboard(仪表盘)、Logging(日志)、 Core Admin(索引库管理)、 Java Properties(Java 属性)、 Thread Dump(线程管道)、 Core Selector(Core 选择器)几部分组成,接下来将一一介绍。

二、Dashboard(仪表盘):包含 solr 搭建路径、版本信息,还有系统内存、jvm 内存和 jvm 参数等信息。

三、日志:用来查看警告或异常的信息,黄色代表警告,红色代表异常

在这里我们可以看到 【Level】选项

在 【Level】 中可以看到 ALL、TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF、UNSET 几个可选项。Level 是用来控制相关类日志的显示信息的内容,其中:

ALL:显示全部信息

INFO:除了正常信息,其余信息全部显示

WARN:显示警告信息

ERROR:显示异常信息

UNSET:移除之前设置的信息

其他信息不再赘述(但是本人设置了也没有看到什么效果,[汗].......)

四、索引库管理:Core 管理,索引库优化等。主要包括 Add Core(添加 Core)、Unload(卸载 Core)、Rename(重命名 Core)、Optimize(优化索引库)几个功能

其中:

instanceDir:代表当前 Core 的根目录

dataDir:代表当前 Core 索引文件的存放目录

numDocs:代表当前 Core 索引文档数量。它可能大于 xml 文件个数,因为一个 xml 文件可能存在多个 <doc> 标签。

maxDoc:代表当前 Core 最大索引文档数量。它可能因为重复提交时 maxDoc 就会变大。

(关于 numDocs 和 maxDoc 具体意义我也不是很清楚......)

四、Select Core(选择 Core):选择相应的 Core 进行操作。

1、Overview(概览):选择 Core 的基本信息。

2、Analysis 分词器检验:用来校验所引用分词器的效果。其中 Field Value(Index) 代表需要分词的文本,Field Value(Query) 代表分词标准

其中:

SF:StopFielter,代表停止词

LCF:LowerCaseFielter,代表忽略大小写

ST:(不知道)

五、Config 就是 solrconfig.xml 文件

六、Dataimport:是从数据库中导入索引文件

七、Document(从文件中导入数据):通过该界面,我们可以选择相应的文件向服务器中导入索引文件。

1、DocumentType:导入文件的形式:

File Upload:从文件中导入,即上传文件

JSON:在 Document(s)中写入特定格式的 JSON 文件

XML:在 Document(s)中写入特定格式的 XML 文件

2、Document(s):写入特定格式的 JSON 或 XML 文件

3、CommitWithin:提交的最大数量

4、Overwrite:是否覆盖(如果两个索引文件的 ID 相同,是否覆盖旧的索引文件)

5、Boot(权重):如果想对不同类型的文章,或者字段设置不同的权重,或者对不同的搜索词语设置权重。但是这样会消耗内存。

1)、添加 JSON 格式文件

2)添加 XML 文件

3)、添加物理文件

八、Query(查询、重要):查询索引文档

1、q:查询参数,格式 FieldName:FieldValue,查询忽略大小写,单词匹配。例如:name:solr(查找 name 中包含 solr 的全部数据)。

2、fq:过滤查询参数,在 q 的查询结果上进一步筛选结果。例如:id:1212(在 name 中包含 solr 的结果上查找 id 为 1212 的数据)。

3、sort:排序,格式:fieldName desc|asc [,fieldName desc|asc ]。例如:name desc 按 name 属性降序排列

4、start,rows:返回结果从第几行显示,一共显示多少行。分页中用到

5、fl:字段过滤,返回结果中显示的 Field 。例如: id,name :返回结果中只包含 id 和 name 字段值,其他字段不显示

6、Raw Query Parameters:组合查询条件,相当于多个 q

7、wt : 输出结果格式。

8、indent:返回结果是否缩进。通常调试 XML 结果用

9、debugQuery:是否显示 Debug 信息。

10、dismax:它是基于 Lucene 的 DisjunctionMaxQuery 的扩展,用来取得文档最大打分(设置权重)

11、edismax:dismax 的加强版

12、hl:高亮显示

13、facet:Solr高级查询facet

14、spatial:空间查询

15、spellcheck:拼写检查

 

 

solr schema使用

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.   略...  
  3. <!--    
  4. 这是Solr的schema文件,应该命名为schema.xml,并且在solr home的conf目录下  
  5. (如,默认在./solr/conf/schema.xml).  
  6.   
  7.  有关如何根据需要定制化该文件,请参照:  
  8.  http://wiki.apache.org/solr/SchemaXml  性能须知: 这里包含了很多实际应用不需要的可选项。 为改善性能,你可以:  
  9.   - 尽量将所有仅用于搜索,而不用于实际返回的字段设置stored="false";  
  10.   - 尽量将所有仅用于返回,而不用于搜索的字段设置indexed="false";  
  11.   - 去掉所有不需要的copyField 语句;  
  12.   - 为了达到最佳的索引大小和搜索性能,对所有的文本字段设置indexed="false",  
  13.     使用copyField将他们拷贝到“整合字段”name="text"的字段中,使用整合字段进行搜索;  
  14.   - 使用server模式来运行JVM,同时将log级别调高, 避免输出所有请求的日志。  
  15. -->  
  16.   
  17. <schema name="example" version="1.5">  
  18.   略...  
  19.   
  20.  <fields>  
  21.    <!-- fields各个属性说明:  
  22.      name: 必须属性 - 字段名  
  23.      type: 必须属性 - <types>中定义的字段类型   
  24.      indexed: 如果字段需要被索引(用于搜索或排序),属性值设置为true  
  25.      stored: 如果字段内容需要被返回,值设置为true  
  26.      docValues: 如果这个字段应该有文档值(doc values),设置为true。文档值在门  
  27.            面搜索,分组,排序和函数查询中会非常有用。虽然不是必须的,而且会导致生成  
  28.            索引变大变慢,但这样设置会使索引加载更快,更加NRT友好,更高的内存使用效率。  
  29.            然而也有一些使用限制:目前仅支持StrField, UUIDField和所有 Trie*Fields,   
  30.            并且依赖字段类型, 可能要求字段为单值(single-valued)的,必须的或者有默认值。  
  31.      multiValued: 如果这个字段在每个文档中可能包含多个值,设置为true  
  32.      termVectors: [false] 设置为true后,会保存所给字段的相关向量(vector)  
  33.            当使用MoreLikeThis时, 用于相似度判断的字段需要设置为stored来达到最佳性能.  
  34.      termPositions: 保存和向量相关的位置信息,会增加存储开销   
  35.      termOffsets: 保存 offset 和向量相关的信息,会增加存储开销  
  36.      required: 字段必须有值,否则会抛异常  
  37.      default: 在增加文档时,可以根据需要为字段设置一个默认值,防止为空  
  38.    -->  
  39.   
  40.    <!-- 字段名由字母数字下划线组成,且不能以数字开头。两端为下划线的字段为保留字段,  
  41.       如(_version_)。  
  42.     -->  
  43.           
  44.    <field name="id" type="string" indexed="true" stored="true"   
  45.            required="true" multiValued="false" />   
  46.   
  47.    <field name="title" type="text_general" indexed="true"   
  48.            stored="true" multiValued="true"/>  
  49.    <field name="description" type="text_general" indexed="true" stored="true"/>  
  50.    <field name="author" type="text_general" indexed="true" stored="true"/>  
  51.    <field name="keywords" type="text_general" indexed="true" stored="true"/>  
  52.    <field name="category" type="text_general" indexed="true" stored="true"/>  
  53.    <field name="url" type="text_general" indexed="true" stored="true"/>  
  54.    <field name="last_modified" type="date" indexed="true" stored="true"/>  
  55.    <!-- 注意: 为了节省空间,这个字段默认不被索引, 因使用copyField被拷贝到了名为text的字段中  
  56.       。用于内容返回和高亮。搜索时使用text字段   
  57.    -->  
  58.    <field name="content" type="text_general" indexed="false"   
  59.            stored="true" multiValued="true"/>  
  60.      
  61.    <!-- 整合字段(catchall field), 包含其他可搜索的字段 (通过copyField实现) -->  
  62.    <field name="text" type="text_general" indexed="true"   
  63.            stored="false" multiValued="true"/>  
  64.   
  65.    <!-- 保留字段,不能删除,否则报错 -->  
  66.    <field name="_version_" type="long" indexed="true" stored="true"/>  
  67.      
  68.  </fields>  
  69.   
  70.   
  71.  <!-- 文档的唯一标识,可理解为主键,除非标识为required="false", 否则值不能为空-->  
  72.  <uniqueKey>id</uniqueKey>  
  73.   
  74.   <!-- 拷贝需要索引的字段到整合字段中  -->  
  75.    <copyField source="title" dest="text"/>  
  76.    <copyField source="author" dest="text"/>  
  77.    <copyField source="description" dest="text"/>  
  78.    <copyField source="keywords" dest="text"/>  
  79.    <copyField source="content" dest="text"/>  
  80.    <copyField source="url" dest="text"/>  
  81.    
  82.   <types>  
  83.     <!-- 字段类型定义 -->  
  84.     <fieldType name="string" class="solr.StrField" sortMissingLast="true" />  
  85.     <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>  
  86.     <fieldType name="int" class="solr.TrieIntField" precisionStep="0"   
  87.         positionIncrementGap="0"/>  
  88.     <fieldType name="float" class="solr.TrieFloatField" precisionStep="0"   
  89.         positionIncrementGap="0"/>  
  90.     <fieldType name="long" class="solr.TrieLongField" precisionStep="0"   
  91.         positionIncrementGap="0"/>  
  92.     <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0"   
  93.         positionIncrementGap="0"/>  
  94.     <fieldType name="date" class="solr.TrieDateField" precisionStep="0"   
  95.         positionIncrementGap="0"/>  
  96.       略...  
  97.     <!-- Thai,泰语类型字段 -->  
  98.     <fieldType name="text_th" class="solr.TextField" positionIncrementGap="100">  
  99.       <analyzer>   
  100.         <tokenizer class="solr.StandardTokenizerFactory"/>  
  101.         <filter class="solr.LowerCaseFilterFactory"/>  
  102.         <filter class="solr.ThaiWordFilterFactory"/>  
  103.         <filter class="solr.StopFilterFactory" ignoreCase="true"   
  104.             words="lang/stopwords_th.txt" />  
  105.       </analyzer>  
  106.     </fieldType>  
  107.       
  108.     <!-- Turkish,土耳其语类型字段 -->  
  109.     <fieldType name="text_tr" class="solr.TextField" positionIncrementGap="100">  
  110.       <analyzer>   
  111.         <tokenizer class="solr.StandardTokenizerFactory"/>  
  112.         <filter class="solr.TurkishLowerCaseFilterFactory"/>  
  113.         <filter class="solr.StopFilterFactory" ignoreCase="false"   
  114.             words="lang/stopwords_tr.txt" />  
  115.         <filter class="solr.SnowballPorterFilterFactory" language="Turkish"/>  
  116.       </analyzer>  
  117.     </fieldType>  
  118.       
  119.     <!-- Chinese,需要我们自己配置,整合mmseg4j就配置在这里 -->  
  120.  </types>  
  121.     
  122.   <!-- 文档相似度判断依赖于文档相似度得分。 一个自定义的 Similarity 或 SimilarityFactory   
  123.      可以在这里指定, 但是默认的设置已经适合大多数应用。可以参考:   
  124.      http://wiki.apache.org/solr/SchemaXml#Similarity  
  125.     -->  
  126.   <!--  
  127.      <similarity class="com.example.solr.CustomSimilarityFactory">  
  128.        <str name="paramkey">param value</str>  
  129.      </similarity>  
  130.     -->  
  131.   
  132. </schema>  

##################################使用solr遇到一个问题 start############################

solr 在使用查询的时候,【q=city:new york】 的时候会命中包含new york的所有数据文档并返回。

但是使用中文【q=city:成都】 的时候会命中包含成和都的合集,实际上我们需要的是精确查找,查找资料发现,如果想只查找包含【成都】

这个词语的文档,我们需要这样做【q=city:"成都"】必须要添加上引号

##################################使用solr遇到一个问题 end############################

 

比较重要的几个配置

分词:

 

[html] view plain copy
 
  1. <!-- IK分词 start-->  
  2.     <fieldType name="text_ik" class="solr.TextField">     
  3.         <analyzer type="index">  
  4.             <!--   
  5.                 IKTokenizerFactory:继承 TokenizerFactory    
  6.                 useSmart:是否启用 智能分词  
  7.             -->  
  8.             <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" />  
  9.             <!-- 
  10.                 StopFilterFactory:停止分词,会根据stopwords.txt中配置的文件停止分词 
  11.             -->  
  12.             <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />  
  13.         </analyzer>  
  14.         <analyzer type="query">  
  15.             <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" />  
  16.             <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />  
  17.         </analyzer>  
  18.     </fieldType>  
  19. <!-- IK分词 end-->  


同义词配置:

 

 

[html] view plain copy
 
  1. <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">  
  2.       <analyzer type="index">  
  3.         <tokenizer class="solr.StandardTokenizerFactory"/>  
  4.         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />  
  5.         <!-- in this example, we will only use synonyms at query time  
  6.         <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>  
  7.         -->  
  8.         <filter class="solr.LowerCaseFilterFactory"/>  
  9.       </analyzer>  
  10.       <analyzer type="query">  
  11.         <tokenizer class="solr.StandardTokenizerFactory"/>  
  12.         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />  
  13.         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>  
  14.         <filter class="solr.LowerCaseFilterFactory"/>  
  15.       </analyzer>  
  16.     </fieldType>  


评分权重配置(支持自定义):

 

 

[html] view plain copy
 
  1. <similarity class="com.example.solr.CustomSimilarityFactory" />  

 

配置默认查询字段

以query查询为例 默认查询的是field name="text"的字段,其他select或者自己定义的查询组件也是一样的道理

 

[html] view plain copy
 
  1. <requestHandler name="/query" class="solr.SearchHandler">  
  2.      <lst name="defaults">  
  3.        <str name="echoParams">explicit</str>  
  4.        <str name="wt">json</str>  
  5.        <str name="indent">true</str>  
  6.        <!-- 默认查询字段 -->  
  7.        <str name="df">text</str>  
  8.      </lst>  
  9.   </requestHandler>  

 

###########################修改schema.xml###################################

将solr发布到tomcat中,例如需要修改schema.xml,添加一个field,这个时候其实是不支持热发布的,需要重启tomcat

 

CopyField(本段内容直接从solr中文网copy而来):

      

你可能想让document的一些字段可以多次使用。solr 有一个字段复制机制,可以提交多个不同类型字段集中到一个字段。字段复制主要涉及两个概念,source和destination,一个是要复制的字段,另一个是要复制到哪个字段,以下是个例子:
1
<copyField source="cat" dest="text" maxChars="30000" />

 

上例中,如果text字段有数据的话,cat字段的内容将被添加到text字段中。maxChars 参数,一个int类型参数,用于限制复制的字符数。

source和destination都支持通配符。以下是一个将所有以 _t 结尾的字段全部复制到text字段中。
1
<copyField source="*_t" dest="text" maxChars="25000" />
    其实说的简单一点,比如现在你要查询包涵"Java"的博客, 那么你肯定要查内容,标题是否包含Java,但是solr不能像SQL那样,where tittle like '%Java%'  or  content like '%Java%'.   这个时候copyField就派上用场了, 定义一个新字段,将title和content 复制到这个新字段,索引的时候,直接从这个新字段查询,这样就达到目地了。  这便是copyField的典型应用场景 。注意:如果dest由多个source构成,就需要将其指定为multiValued。
在网上找了一个例子:
[html] view plain copy
 
  1. <schema name="eshequn.post.db_post.0" version="1.1"    
  2.     xmlns:xi="http://www.w3.org/2001/XInclude">    
  3.      <fields>    
  4.         <!-- for title -->    
  5.         <field name="t" type="text" indexed="true" stored="false" />    
  6.         <!-- for abstract -->    
  7.         <field name="a" type="text" indexed="true" stored="false" />    
  8.         <!-- for title and abstract -->    
  9.         <field name="ta" type="text" indexed="true" stored="false" multiValued="true"/>    
  10.     </fields>    
  11.     <copyField source="t" dest="ta" />    
  12.     <copyField source="a" dest="ta" />    
  13. </schema>    


 
 
DynamicField:
   
动态字段(Dynamic fields)允许 solr 索引没有在 schema 中明确定义的字段。这个在忘记定义一些字段时很有用。动态字段可以让系统更灵活,通用性更强。
动态字段和常规字段类似,除了它名字中包含一个通配符外,在索引文档时,一个字段如果在常规字段中没有匹配时,将到动态字段中匹配。
假设schema中定义了一个叫*_i的动态动态字段,如果要索引一个叫 cost_i 的字段,但是 schema 中不存在 cost_i 的字段,这样 cost_i  将被索引到 *_i 字段中。
动态字段也是定义在 schema.xml 文件中,和其他字段一样,它也有个名词,字段类型,和属性。
1
<dynamicField name="*_i" type="sint" indexed="true" stored="true"/>

建议在 schema.xml 定义一些基本的动态字段,以备扩展之用。

posted on 2017-06-13 21:41  琦少  阅读(241)  评论(0编辑  收藏  举报