全文搜索服务器:SOLR安装与应用

基于vue2的echarts3D地球 采用vue2+js实现了echarts3D地球的放大、缩小和旋转 阅读详情
利用SOLR搭建企业搜索平台 之一(运行solr)

   在网络上找了很多的关于solr的资料,发现非常的不全面,即使就是官方的wiki,也是如此!

  基于现阶段正在研究的solr应 用,陆续的会分享我的一些经验!

  今天要说的是: 怎么跑起来!

  1》 首先下载好solr,我用的是 solr1.3,下载地址:

  windows版本

  http://labs.xiaonei.com/apache-m ... ache-solr-1.3.0.zip

  linux版本

  http://labs.xiaonei.com/apache-m ... ache-solr-1.3.0.tgz

  2》准备运行容器,我用的是tomcat6.0.20.如果是玩的话,也可以不用准 备专门的容易,你只需解压好solr的下载包,找到 example文件夹,然后运行 start.jar。具体指令:java -jar start.jar做应用的时候,不建议采用该方式。该方式内部包含了jetty!

  3》有关tomcat的使用,不是本文的重点,如 果你有问题,请参见tomcat的使用。解压好tomcat,将solr包下面的dist文件夹中的apache-solr-1.3.0.war 拷贝到 tomcat的webapps,并且改名为 solr.war。

  4》新建一个 solr-tomcat文件夹,我是把这个文件夹建立在C盘根目录,你可以采用同样方式,也可以不这样,放哪由你决定。建立好该文件夹以后,在把它下面在 建立一个solr文件夹,把solr包里面的example/solr文件夹下面的所有文件放入到 solr里面。

  5》最后一步 配置 solr.home,可以有三种方式。

  1)基于当前路径的方式

  这种情况需要在c:/solr- tomcat/目录下去启动tomcat,Solr查找./solr,因此在启动时候需要切换到c:/solr-tomcat/

  2) 基于环境变量

  windows在环境变量中建立solr.home,值为c:/solr-tomcat

  linux 在当前用户的环境变量中(.bash_profile)或在catalina.sh中添加如下环境变量

  export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/opt/solr-tomcat/solr"

   3)基于JNDI

  在tomcat的conf文件夹建立Catalina文件夹,然后在Catalina文件夹中在建立 localhost文件夹,在该文件夹下面建立solr.xml,其中内容:

  Xml代码   

<Context  docBase="c:/tomcat/webapps/solr.war" debug="0" crossContext="true" >  
   <Environment name="solr/home" type="java.lang.String"  value="c:/solr-tomcat/solr" override="true" /> 
</Context>


   问题描述:

  个人发现的一个问题,就是如果配置好JNDI的话,然后在tomcat的bin文件夹下面启动 tomcat的话,会在tomcat的bin下面建立solr文件夹,这个文件夹中主要存放的索引文件。本来这些东西应该放入c:/solr- tomcat/solr。如果你不想出现这种情况的话,请使用基于当前路径的方式。

  6》打开浏览器,请看看能否访问该服务。如果能够 访问,恭喜您跑起来了。



利用SOLR搭建企业搜索平台 之二(中文分词)

   这篇文章,主要说的是 怎么在solr中加入中文分词,参考了一些文章,但是还是花了不少时间才搞出的。可能是大侠们太牛了,所以很多细节东西都没有写出来!但是要指出的是很多 文章都是抄来抄去的!

  入正题:

  在上面的一个文章中,已经使solr跑起来了,在上面的基础上,加入中文分词。我 用的是paoding分词器!

  1》请下好paoding分词器,下载地址:

  http://code.google.com/p/paoding/downloads/list , 在这里要非常感谢paoding作者:qieqie

  在使用paoding的时候要注意:paoding的dic位置,也就是字典的位 置,有两种办法解决:                    

  1) 在系统环境变量中加入PAODING_DIC_HOME这个变量,值为paoding压缩包下面的dic的解压位置。

   2)paoding-analysis.jar里面有个paoding-dic-home.properties文件,指定dic也可,但是要重新编译这 个jar包,我采用的后面一种办法,只要每次固定好dic位置,部署还不是很不方便,设置环境变量我比较反感

  2》建立文件

   Java代码  

package com.yeedoo.slor.tokenizer; 
 
import  java.io.Reader; 
import java.util.Map; 
 
import  net.paoding.analysis.analyzer.PaodingTokenizer; 
import  net.paoding.analysis.analyzer.TokenCollector; 
import  net.paoding.analysis.analyzer.impl.MaxWordLengthTokenCollector; 
import  net.paoding.analysis.analyzer.impl.MostWordsTokenCollector; 
import  net.paoding.analysis.knife.PaodingMaker; 
 
import  org.apache.lucene.analysis.TokenStream; 
import  org.apache.solr.analysis.BaseTokenizerFactory; 
 
public class  ChineseTokenizerFactory extends BaseTokenizerFactory { 
 
 /** 
  * 最多切分 默认模式 
 */ 
 public static final String MOST_WORDS_MODE =  "most-words"; 
 
 /** 
 * 按最大切分 
 */ 
 public static  final String MAX_WORD_LENGTH_MODE = "max-word-length"; 
 
 private  String mode = null; 
 
 public void setMode(String mode) { 
  if (mode == null || MOST_WORDS_MODE.equalsIgnoreCase(mode) ||  "default".equalsIgnoreCase(mode)) { 
  this.mode = MOST_WORDS_MODE; 
  } else if (MAX_WORD_LENGTH_MODE.equalsIgnoreCase(mode)) { 
   this.mode = MAX_WORD_LENGTH_MODE; 
 } else { 
  throw new  IllegalArgumentException("不合法的分析器Mode参数设置:" + mode); 
 } 
 } 
 
  @Override 
 public void init(Map<String,String> args) { 
  super.init(args); 
 setMode(args.get("mode").toString()); 
 } 
 
  public TokenStream create(Reader input) { 
 return new  PaodingTokenizer(input, PaodingMaker.make(), createTokenCollector()); 
  } 
 
 private TokenCollector createTokenCollector() { 
 if  (MOST_WORDS_MODE.equals(mode)) 
  return new  MostWordsTokenCollector(); 
 if (MAX_WORD_LENGTH_MODE.equals(mode)) 
   return new MaxWordLengthTokenCollector(); 
 throw new Error("never  happened"); 
 } 
 
}


利用SOLR搭建企业搜索平台 之三(配置文件)

   运行solr是个很简单的事,如何让solr高效运行你的项目,这个就不容易了。要考虑的因素太多。这里很重要一个就是对solr的配置要了解。懂得配 置文件每个配置项的含义,这样操作起来就会如鱼得水!

  在solr里面主要的就是solr的主目录下面的 schema.xml,solrConfig.xml,如果你看过前两篇文章的话,你应该知道solr的主目录处于什么位置(c:/solr- tomcat/solr/conf/)。

  在这个文章中,我们首先来说说这个schema.xml。

   schema.xml,这个相当于数据表配置文件,它定义了加入索引的数据的数据类型的。主要包括types、fields和其他的一些缺省设置。

   1》首先需要在types结点内定义一个FieldType子结点,包括name,class,positionIncrementGap等等一些参 数,name就是这个FieldType的名称,class指向org.apache.solr.analysis包里面对应的class名称,用来定义 这个类型的行为。在FieldType定义的时候最重要的就是定义这个类型的数据在建立索引和进行查询的时候要使用的分析器analyzer,包括分词和 过滤。在例子中text这个FieldType在定义的时候,在index的analyzer中使用 solr.WhitespaceTokenizerFactory这个分词包,就是空格分词,然后使用 solr.StopFilterFactory,solr.WordDelimiterFilterFactory,solr.LowerCaseFilterFactory,solr.EnglishPorterFilterFactory,solr.RemoveDuplicatesTokenFilterFactory 这几个过滤器。在向索引库中添加text类型的索引的时候,Solr会首先用空格进行分词,然后把分词结果依次使用指定的过滤器进行过滤,最后剩下的结果 才会加入到索引库中以备查询。Solr的analysis包并没有带支持中文的包,在第二篇文章中详细讲了怎样添加paoding中文分词器,详情请参见http://lianj-lee.javaeye.com/blog/424474

   2》接下来的工作就是在fields结点内定义具体的字段(类似数据库中的字段),就是filed,filed定义包括name,type(为之前定义 过的各种FieldType),indexed(是否被索引),stored(是否被储存),multiValued(是否有多个值)等等。

   例:

  Xml代码   

<fields> 
 <field name="id"  type="integer" indexed="true" stored="true" required="true" /> 
  <field name="name" type="text" indexed="true" stored="true" /> 
  <field name="summary" type="text" indexed="true" stored="true" /> 
  <field name="author" type="string" indexed="true" stored="true" />  
 <field name="date" type="date" indexed="false" stored="true"  /> 
 <field name="content" type="text" indexed="true"  stored="false" /> 
 <field name="keywords" type="keyword_text"  indexed="true" stored="false" multiValued="true" /> 
 <field  name="all" type="text" indexed="true" stored="false"  multiValued="true"/> 
</fields>



  field的定义相当重要,有几个技巧需 注意一下,对可能存在多值得字段尽量设置multiValued属性为true,避免建索引是抛出错误;如果不需要存储相应字段值,尽量将stored属 性设为false。

  3》建议建立了一个拷贝字段,将所有的全文字段复制到一个字段中,以便进行统一的检索:

   Xml代码

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

  并在拷贝字段结点处完成拷贝设置:

   Xml代码 <copyField source="name" dest="all"/> 
<copyField  source="summary" dest="all"/>


  4》除此之外,还可以定义动态字段,所谓动态字段就是不用指定具 体的名称,只要定义字段名称的规则,例如定义一个 dynamicField,name 为*_i,定义它的type为text,那么在使用这个字段的时候,任何以_i结尾的字段都被认为是符合这个定义的,例 如:name_i,gender_i,school_i等。



利用SOLR搭建企业搜索平台 之四(MultiCore)
  Solr Multicore 是 solr 1.3 的新特性。其目的一个solr实例,可以有多个搜索应用。

   下面着手来将solr给出的一个example跑出来,在《利用SOLR搭建企业搜索平台 之一(运行solr)》这篇文章里面已经讲了怎样来运行solr,这篇文章是基于《利用SOLR搭建企业搜索平台 之一(运行solr)》,有不明白的请参见http://lianj-lee.javaeye.com/blog/424383

  1》 找到solr下载包中的example文件夹,在它的下面有个multicore文件夹,将这个文件夹下面的所有东西copy到 c:/solr-tomcat/solr下面。

  注意:有一个 solr.xml(这只是默认文件,当然也可以指定别的文件),如:

   Xml代码   

<?xml version="1.0" encoding="UTF-8" ?>  
  <solr persistent="false">   
  <cores  adminPath="/admin/cores">  
   <core name="core0"  instanceDir="core0" />  
   <core name="core1"  instanceDir="core1" />  
  </cores>  
 </solr>

 

   这个文件是告诉solr应该加载哪些core,cores里有 core0,core1。core0(可以类比以前的solr.home)/conf目录下有schema.xml与solrconfig.xml,可以 把实际应用的复制过来。现示例就用官方的了。

  2》启动tomcat,访问应用,就可以看到有 Admin core0 和 Admin core1

  3》采用上面的默认solr.xml,索引文件将存放在同一个目录下面,在这里将存放在C:/solr- tomcat/solr/data,如果你想更改目录,或者两个应用存放在不同的目录,请参见下面的xml。

  Xml代码

<core  name="core0" instanceDir="core0"> 
  <property name="dataDir"  value="/data/core0" /> 
 </core>

  给core添加子元素 property,property的两个属性就不说了,一看就能明白!

  solr.core.name -- The core's name as defined in solr.xml

  solr.core.instanceDir -- The core's instance directory (i.e. the directory under which that core's conf/ and data/ directory are located)

  solr.core.dataDir -- The core's data directory (i.e. the directory under which that core's index directory are located)

  solr.core.configName -- The name of the core's config file (solrconfig.xml by default)

   solr.core.schemaName -- The name of the core's schema file (schema.xml by default)

  4》solr.xml具体含义:

  1)solr

  The <solr> tag accepts two attributes:

  persistent - By default, should runtime core manipulation be saved in solr.xml so that it is available after a restart.

  sharedLib - Path to a directory containing .jar files that are added to the classpath of every core. The path is relative to solr.home (where solr.xml sits)

   2)cores

  The <cores> tag accepts two attribute:

   adminPath - Relative path to access the CoreAdminHandler for dynamic core manipulation. For example, adminPath="/admin/cores" configures access via  http://localhost:8983/solr/admin/cores . If this attribute is not specified, dynamic manipulation is unavailable.

   3)core

  The <core> tag accepts two attributes:

   name - The registered core name. This will be how the core is accessed.

   instanceDir - The solr.home directory for a given core.

   dataDir - The data directory for a given core. The default is <instanceDir>/data . It can take an absolute path or a relative path w.r.t instanceDir .  Solr1.4

  4)property

  The <property> tag accepts two attributes:

  name - The name of the property

  value - The value of the property

  由于E文过于 简单,所以就不翻译了!



利用SOLR搭建企业搜索平台 之五(solrj)

   相信很多人,在准备提交数据让solr建立索引的那刻,很纳闷,尽管看了不少网上的一些文章,但是我想依然还是有不少不理解的地方。

   比如提交一个xml,采用post方式,尽管有些文章说了可以采用httpclient。但是我那个时候,还不是很理解,当然现在看来其实也没有什么 了。但是对于一个刚入门solr的初学者,我想讲讲关于solr1.3的 solrj( sorlr J 目前使用二进制的格式作为默认的格式。对于solr1.2的用户通过显示的设置才能使用XML格式。)!

  先上一个例子:

   Java代码

public static final String SOLR_URL = "http://localhost/solr/core0 ";   
public static void commit() { 
 Date date = new Date(); 
  SolrServer solr = null; 
 try { 
 solr = new  CommonsHttpSolrServer(SOLR_URL); 
 } catch (MalformedURLException e1)  { 
 e1.printStackTrace(); 
 } 
for (int i = 0; i < 10000;  i++) { 
  SolrInputDocument sid = new SolrInputDocument(); 
   sid.addField("id", i); 
  sid.addField("name",  "struts+hibernate+spring 开发大全" + i); 
  sid.addField("summary", "三种框架 的综合应用" + i); 
  sid.addField("author", "李良杰" + i); 
   sid.addField("date", new Date()); 
  sid.addField("content", "高级应用类书 籍" + i); 
  sid.addField("keywords", "SSH" + i); 
  try { 
   solr.add(sid); 
  } catch (MalformedURLException e) { 
   e.printStackTrace(); 
  } catch (SolrServerException e) { 
   e.printStackTrace(); 
  } catch (IOException e) { 
   e.printStackTrace(); 
  } 
  System.out.println(i); 
  if (i ==  999) 
  System.out.println((new Date().getTime() - date.getTime()) /  60000 + "分钟"); 
 } 
 try { 
  solr.commit(); 
 } catch  (SolrServerException e) { 
  e.printStackTrace(); 
 } catch  (IOException e) { 
  e.printStackTrace(); 
 } 
}


  上面这段代码的意思是:利用for提交10000 个document,并打印提交10000所需的时间。

  1》 CommonsHttpSolrServer 使用HTTPClient 和solr服务器进行通信 。

  2》 CommonsHttpSorlrServer 允许设置链接属性。

  Java 代码

server.setSoTimeout(1000); // socket read timeout  
  server.setConnectionTimeout(100);  
  server.setDefaultMaxConnectionsPerHost(100);  
  server.setMaxTotalConnections(100);  
  server.setFollowRedirects(false); // defaults to false  
 //  allowCompression defaults to false.  
 // Server side must support  gzip or deflate for this to have any effect.  
  server.setAllowCompression(true);  
 server.setMaxRetries(1); //  defaults to 0. > 1 not recommended.

  3》 实现SolrServer接口的另一个 类:EmbeddedSorrServer,它不需要http连接。

  4》 在构造document的时候,可以一个一个添加到 solrServer,也可以构建一个包含document的Collection,将Collection添加到solrServer,然后 commit。

  5》 也可以构造一个跟document匹配的JavaBean进行提交

  使用 java 注释创建java bean。@Field ,可以被用在域上,或者是setter方法上。如果一个域的名称跟bean的名称是不一样的,那么在java注释中填写别名,具体的,可以参照下面的域 categories         

  Java代码    

import  org.apache.solr.client.solrj.beans.Field;  
 public class Item {  
   @Field  
  String id;  
  @Field("cat")  
  String[]  categories;  
  @Field  
  List<String> features;  
 } 


  java注释也可以使用在setter方法上,如 下面的例子:

  Java代码

@Field("cat")  
 public void  setCategory(String[] c){  
   this.categories = c;  
 } 


   这里应该要有一个相对的,get方法(没有加java注释的)来读取属性

  Java代码

Item item =  new Item();  
item.id = "one";  
item.categories = new String[] {  "aaa", "bbb", "ccc" }; 


  添加给solr         

  Java代码

server.addBean(item); 

  将多个bean提交给solr

  Java代码

List<Item> beans  ;  
//add Item objects to the list  
server.addBeans(beans); 

   注意: 你可以重复使用SolrServer,这样可以提高性能。

  6》

  Java代码

public  static void update() { 
 SolrServer solrServer = null; 
 try { 
  solrServer = new CommonsHttpSolrServer(SOLR_URL); 
 } catch  (MalformedURLException e) { 
 e.printStackTrace(); 
 } 
  UpdateRequest updateRequest = new UpdateRequest(); 
  SolrInputDocument sid = new SolrInputDocument(); 
 sid.addField("id",  100000); 
 sid.addField("name", "struts+hibernate+spring 开发大全"); 
  sid.addField("summary", "三种框架的综合应用"); 
 sid.addField("author", "李良 杰"); 
 sid.addField("date", new Date()); 
 sid.addField("content",  "高级应用类书籍"); 
 sid.addField("keywords", "SSH"); 
  updateRequest.setAction(UpdateRequest.ACTION.COMMIT, false, false);  
  updateRequest.add(sid);  
 try { 
 UpdateResponse updateResponse =  updateRequest.process(solrServer); 
  System.out.println(updateResponse.getStatus()); 
 } catch  (SolrServerException e) { 
 e.printStackTrace(); 
 } catch  (IOException e) { 
 e.printStackTrace(); 
 } 
}

  提交一个document,采用更新方式,注意:

   Java代码

updateRequest.setAction(UpdateRequest.ACTION.COMMIT,  false, false);


  7》

  Java代码

public static void  query() { 
 SolrServer solr = null; 
 try { 
 solr = new  CommonsHttpSolrServer(SOLR_URL); 
 } catch (MalformedURLException e)  { 
 e.printStackTrace(); 
 return; 
 } 
 // http://localhost:8983/solr/spellCheckCompRH?q=epod&spellcheck=on&spellcheck.build=true  
  ModifiableSolrParams params = new ModifiableSolrParams(); 
  params.set("qt", "/spellCheckCompRH"); 
 params.set("q", "编程"); 
  params.set("spellcheck", "on"); 
 params.set("spellcheck.build",  "true"); 
 QueryResponse response = null; 
 try { 
 response =  solr.query(params); 
 } catch (SolrServerException e) { 
  e.printStackTrace(); 
 return; 
 } 
  System.out.println("response = " + response); 
}


  这是一个查询方法。关键 字:“编程”。关于查询的关键字,请参见slor wiki http://wiki.apache.org/solr/QueryParametersIndex , 或等待我的博客更新,在后面会有篇文章详细讲这个问题!

  8》给solr的索引文件手动进行优化,

solr.optimize();

   9》solrJ 提供了一组API,来帮助我们创建查询,下面是一个faceted query的例子。

SolrServer  server = getSolrServer();  
SolrQuery  solrQuery = new  SolrQuery().setQuery("ipod").setFacet(true).setFacetMinCount(1).setFacetLimit(8).    addFacetField("category").addFacetField("inStock");   
QueryResponse  rsp = server.query(solrQuery); 

  所有的 setter/add 方法都是返回它自己本身的实例,所以就像你所看到的一样,上面的用法是链式的。


利用SOLR搭建企业搜索平台 之六(solr查询参数说明)

  在做solr查询的时候,solr提供了很多参数来扩展它自身的强大功能!以下是使用频率最高的一些参 数!

  具体请看:

  1.常用

   q - 查询字符串,必须的。查询语句(类似SQL) 相关详细的操作还需lucene 的query 语法

  fl - 指定返回那些字段内容,用逗号或空格分隔多个。

   start - 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用。

  rows - 指定返回结果最多有多少条记录,配合start来实现分页。

  sort - 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… 。示例:(score desc, price asc)表示先 “score” 降序, 再 “price” 升序,默认是相关性降序。

   wt - (writer type)指定输出格式,可以有 xml, json, php, phps, 后面 solr 1.3增加的,要用通知我们,因为默认没有打开。

  fl表示索引显示那些field(*表示所有field, score 是solr 的一个匹配热度)

  q.op 表示q 中 查询语句的 各条件的逻辑操作 AND(与) OR(或)

  hl 是否高亮

  hl.fl 高亮field

  hl.snippets 不太清楚(反正是设置高亮3就可以了)

   hl.simple.pre 高亮前面的格式

  hl.simple.post 高亮后面的格式

  facet 是否启动统计

  facet.field  统计field

  fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031],找关键字mm,并且date_time是20081001到20091031之间的。
官方文档:http://wiki.apache.org/solr/Comm ... ec487758577506d6002

  2.不常用

   q.op - 覆盖schema.xml的defaultOperator(有空格时用"AND"还是用"OR"操作逻辑),一般默认指定

  df - 默认的查询字段,一般默认指定

  qt - (query type)指定那个类型来处理查询请求,一般不用指定,默认是standard。


  3.其它

   indent - 返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。

   version - 查询语法的版本,建议不使用它,由服务器指定默认值
。


利用SOLR搭建企业搜索平台 之七(solr使用问题集)

  某日,突发奇想,想写这么一个博客,希望记录下所有在solr中使用的毛病。而且我希望广大的看友们也能 一起来说说你们平时遇到的各种错误,这样大家才能一起更好的进步!

  话不多说,进入正题

  1》solr 做索引时报 Lock obtain timed out: SingleInstanceLock: write.lock

  有个频繁做索引的 应用,它同时也对外提供搜索服务。大部分是 solr 1.3 的默认配置。solr 做索引,有时候报:

  Xml代码

2009-7-13  9:48:06 org.apache.solr.common.SolrException log 
严重:  org.apache.lucene.store.LockObtainFailedException: Lock obtain timed  out: SingleInstanceLock: write.lock 
    at  org.apache.lucene.store.Lock.obtain(Lock.java:85) 
    at  org.apache.lucene.index.IndexWriter.init(IndexWriter.java:1140) 
     at org.apache.lucene.index.IndexWriter.<init> (IndexWriter.java:938) 
    at  org.apache.solr.update.SolrIndexWriter.<init>(SolrIndexWriter.java:116)  
...

  是写锁取不到。但重启 solr 又可以正常做,主要是运行时间长了就报这个错了。还是看下配置吧。

   看到 solr 1.3 默认的配置是:

  Xml代码

<indexDefaults>  
   <!-- ... -->  
  <!--  
   This option specifies which  Lucene LockFactory implementation to use.  
  
   single =  SingleInstanceLockFactory - suggested for a read-only index  
         or when there is no possibility of another process trying  
         to modify the index.  
   native = NativeFSLockFactory  
   simple  = SimpleFSLockFactory  
  
   (For backwards compatibility with  Solr 1.2, 'simple' is the default  
    if not specified.)  
   -->  
  <lockType>single</lockType>  
</indexDefaults> 


  默认锁是 single ,只读的。solr 1.2 是 simple,把它改回去了,运行了几天,没事。

  2》lucene & solr optimize 索引后结果与平台有点关系

  昨日做索引的程序重构下,测试 optimize 索引(在原有数据基础上提交索引)时,在开发的机器(windows)里总是会有两段索引,要再 optimize 才只是一个索引段,当然不是设置 maxSegments=2。反复运行还是如此,为了说明是否写的程序有问题,就用 solr 自带的 post.sh (或 post.jar)提交 optimize。结果还是有两段,再提交一次optimize 才是一个段。这问题……

  旧的程序运行得很正常,看了下它也没有提交 两次优化。然后把新的程序也放到服务器(linux)上运行,结果是只有一个段。

  恩,可以认为是与文件系统有关,optimize 的时候是先新生成一段,然后再删除旧的索引,windows 可能是这样在运行期间与文件关联着删除不了旧的。linux 可能是不用(不打开)文件就可以删除。现只能这样简单解释。

  3》换 solr 里的 lucene 包

  solr 1.3 发布的时候,lucene 2.4还没有正式发布,其的 lucene 是开发版,现在lucene 2.4早已发布,那就换上新的 lucene 吧。

  下载 solr 1.3 http://labs.xiaonei.com/apache-m ... ache-solr-1.3.0.zip 和 lucene 2.4 http://labs.xiaonei.com/apache-m ... va/lucene-2.4.0.zip 到目录如e:/search/,

  把 e:/search/apache-solr-1.3/lib 目录下的 lucene 相关的*.jar删除:

   lucene-analyzers-2.4-dev.jar

  lucene-core-2.4-dev.jar

   lucene-highlighter-2.4-dev.jar

  lucene-memory-2.4-dev.jar

   lucene-queries-2.4-dev.jar

  lucene-snowball-2.4-dev.jar

   lucene-spellchecker-2.4-dev.jar


  从 e:/search/lucene-2.4/(或contrib/)目录下找到对应的放到solr-1.3/lib下

  然后构建 solr,到e:/search/apache-solr-1.3目录,ant dist-war

  4》solr q查询容错性

   当solr接收没q参数(或q参数值为空)请求时,会报错。报错十分讨厌,对开发调试时才比较有用,但实际运行环境报错就不太好了,java异常可能有 点性能消耗,那干脆就返回正常的结果好了(只是结果里没有找到的数据)。

  solr 1.3 可以写个组件去做。判断到空的时候,加一个q参数,其值为在索引里没有的数据。这样就可以返回没有数据的结果。

  其实这样实现还是比较 麻烦。可以在 solrconfig.xml的requestHandler里加一个默认参数。如q=abcdefghijk。配置如下:

   Xml代码

<requestHandler name="standard"  class="solr.SearchHandler" default="true">  
  <lst  name="defaults">  
   <str name="q">abcdefghijk</str>   
  </lst>  
</requestHandler>


  这样的话查询容错性比较好, 查询请求没有带q参数也可,q参数值为空也可。tomcat不会报错,还可以返回结果。



利用SOLR搭建企业搜索平台 之八(solr 实现去掉重复的搜索结果,打SOLR-236_collapsing.patch补丁

  引用Bory.Chanhttp://blog.chenlb.com/2009/04/a ... plicate-result.html

  打上SOLR-236_collapsing.patch补丁,实现 solr 搜索结果折叠、除去重复的搜索结果,可以实现类似google搜索结果的“站内的其它相关信息 ”。solr collapsing patch 是用 hash 某个字段来实现折叠重复结果的。下面我演示下应用这个补丁并搜索试用下。

  其实 solr 上已经有了这功能的实现:solr 1.3 collapse patch, 请看:https://issues.apache.org/jira/browse/SOLR-236 , 我这里下载是了新的:https://issues.apache.org/jira/s ... 36_collapsing.patch 。

  下载好后就需要打上补丁了,先准备一份源码在D:/apache-solr- 1.3.0目录下。没有可以去下载:http: //archive.apache.org/dist/lucene/solr/1.3.0/apache-solr-1.3.0.zip。把SOLR- 236_collapsing.patch文件放在D:/apache-solr-1.3.0目录下, 打补丁有我知道的有两种:用linux工具 patch(windows 下有 cygwin);用 ant 的 patch。

  windows cygwin 的 patch:

   Html代码

D:/apache-solr-1.3.0>patch -p0 <  SOLR-236_collapsing.patch 
patching file  src/test/org/apache/solr/search/TestDocSet.java 
patching file  src/java/org/apache/solr/search/CollapseFilter.java 
patching file  src/java/org/apache/solr/search/DocSet.java 
patching file  src/java/org/apache/solr/search/NegatedDocSet.java 
patching file  src/java/org/apache/solr/search/SolrIndexSearcher.java 
patching file  src/java/org/apache/solr/common/params/CollapseParams.java 
patching  file src/java/org/apache/solr/handler/component/CollapseComponent.java



  ant patch,把下面的内容保存为 patch-build.xml 放到 D:/apache-solr-1.3.0 目录下:

  Xml代码

<?xml  version="1.0" encoding="UTF-8"?>  
<project name="solr-patch"  default="apply-patch" basedir=".">   
  
  <target  name="apply-patch" description="Apply a patch file. Set  -Dpatch.file">  
    <patch patchfile="${patch.file}"  strip="0"/>  
  </target>  
</project> 

   ant 打补丁:

  Html代码 D:/apache-solr-1.3.0>ant -Dpatch.file=SOLR-236_collapsing.patch -f  patch-build.xml 
Buildfile: patch-build.xml 
 
apply-patch: 
[patch]  patching file src/test/org/apache/solr/search/TestDocSet.java 
[patch]  patching file src/java/org/apache/solr/search/CollapseFilter.java 
[patch]  patching file src/java/org/apache/solr/search/DocSet.java 
[patch]  patching file src/java/org/apache/solr/search/NegatedDocSet.java 
[patch]  patching file src/java/org/apache/solr/search/SolrIndexSearcher.java 
[patch]  patching file src/java/org/apache/solr/common/params /CollapseParams.java 
[patch] patching file  src/java/org/apache/solr/handler/component/CollapseComponent.java 
 
BUILD  SUCCESSFUL 
Total time: 0 seconds 



  源码打上了补丁,然后用 ant 构建源码:

   D:/apache-solr-1.3.0>ant dist

  在 D:/apache-solr-1.3.0/dist 目录下可以找到编译好的 solr 了。然后把 solr 放到 tomcat 中去运行它,把下面的内容保存在 TOMCAT_HOME/conf/Catalina/localhost/solr.xml 文件中:

  Xml代码

<Context  docBase="D:/apache-solr-1.3.0/dist/apache-solr-1.3.0.war"  reloadable="true" >  
  <Environment name="solr/home"  type="java.lang.String" value="D:/apache-solr-1.3.0/example/solr"  override="true" />  
</Context> 

  修改 D:/apache-solr-1.3.0/example/solr/conf/solrconfig.xml 使 solr 可以支持 collapse。

  定义搜索组件,在 QueryComponent 附近:

   <searchComponent name="collapse" class="org.apache.solr.handler.component.CollapseComponent" /> 

   定义一个 handler 使用上面的搜索组件:

  Xml代码

<requestHandler  name="collapse" class="solr.SearchHandler">  
 <!-- default  values for query parameters -->  
  <lst name="defaults">  
    <str name="echoParams">explicit</str>  
  </lst>   
 <arr name="components">  
   <str>collapse</str>  
  <str>debug</str>  
  </arr>  
</requestHandler> 



  安装启动 tomcat,现在提交一些数据给它,用官方的示例数据就可以了。运行:

  Html代码 D:/apache-solr-1.3.0/example/exampledocs>java -Durl=http://localhost:8080/solr/update   -Dcommit=yes -jar post.jar *.xml 
SimplePostTool: version 1.2 
SimplePostTool:  WARNING: Make sure your XML documents are encoded in UTF-8, other  encodings are not currently supported 
SimplePostTool: POSTing  files to http://localhost:8080/solr/update .. 
SimplePostTool:  POSTing file hd.xml 
SimplePostTool: POSTing file ipod_other.xml 
SimplePostTool:  POSTing file ipod_video.xml 
SimplePostTool: POSTing file mem.xml 
SimplePostTool:  POSTing file monitor.xml 
SimplePostTool: POSTing file monitor2.xml 
SimplePostTool:  POSTing file mp500.xml 
SimplePostTool: POSTing file sd500.xml 
SimplePostTool:  POSTing file solr.xml 
SimplePostTool: POSTing file spellchecker.xml  
SimplePostTool: POSTing file utf8-example.xml 
SimplePostTool:  POSTing file vidcard.xml 
SimplePostTool: COMMITting Solr index  changes..

  http://localhost:8080/solr/admin/stats.jsp 有结果了? 有了。然后开始查询试试看。

  查询:http://localhost:8080/solr/select/?q=*%3A*&indent=on& qt=collapse&collapse=true&collapse.field=popularity&collapse.threshold=1




  结果:

  Xml代码  

<?xml  version="1.0" encoding="UTF-8"?>  
<response>  
  
<lst  name="responseHeader">  
 <int name="status">0</int>   
 <int name="QTime">0</int>  
 <lst  name="params">  
 <str  name="collapse.field">popularity</str>  
 <str  name="fl">id</str>  
 <str  name="collapse.threshold">1</str>  
 <str  name="indent">on</str>  
 <str name="q">*:*</str& gt;  
 <str name="qt">collapse</str>  
 <str  name="collapse">true</str>  
 </lst>  
</lst>   
<lst name="collapse_counts">  
 <str  name="field">popularity</str>  
 <lst name="doc">  
  <int name="SP2514N">4</int>  
 <int  name="F8V7067-APL-KIT">1</int>  
 <int  name="MA147LL/A">1</int>  
 <int  name="TWINX2048-3200PRO">1</int>  
 <int  name="VS1GB400C3">3</int>  
 <int  name="1">10</int>  
 </lst>  
 <lst  name="count">  
 <int name="6">4</int>  
 <int  name="1">1</int>  
 <int name="10">1</int>  
  <int name="5">1</int>  
 <int name="7">3</int& gt;  
 <int name="0">10</int>  
 </lst>  
  <str name="debug">HashDocSet(6) Time(ms): 0/0/0/0</str>  
</lst>   
<result name="response" numFound="6" start="0">  
  <doc>  
 <str name="id">SP2514N</str>  
  </doc>  
 <doc>  
 <str  name="id">F8V7067-APL-KIT</str>  
 </doc>  
  <doc>  
 <str name="id">MA147LL/A</str>  
  </doc>  
 <doc>  
 <str  name="id">TWINX2048-3200PRO</str>  
 </doc>  
  <doc>  
 <str name="id">VS1GB400C3</str>  
  </doc>  
 <doc>  
 <str name="id">1</str>   
 </doc>  
</result>  
</response>

  
可以看到  collapse_counts 相关的输出: 
 
<lst name="collapse_counts">  
  <str name="field">popularity</str>  
 <lst  name="doc">  
 <int name="SP2514N">4</int>  
...  
  </lst>  
 <lst name="count">  
 <int  name="6">4</int>  
 <int name="1">1</int>  
  <int name="10">1</int>  
 <int  name="5">1</int>  
 <int name="7">3</int>  
  <int name="0">10</int>  
 </lst>  
 <str  name="debug">HashDocSet(6) Time(ms): 0/0/0/0</str>  
</lst> 

 

  上面的 count 下的内容(它的顺序是result/doc的顺序),表示 popularity=6 相同的结果还有 4 个,与 popularity=1 相同的结果还有 1 个,依此类推。这样就可以显示给用户的界面里提示“相同的其它内容不有N个”。

   使用的参数有:

  #启用 collapse 组件 

  collapse=true 

  #用那个 字段来 hash 去除重量内容 

  collapse.field=popularity 

  #要结果中可以最多出 现几个相同的文档 

  collapse.threshold=1 

  当然还有其它参数,请 看:org.apache.solr.common.params.CollapseParams 类。




利用SOLR搭建企业搜索平台 之九(solr的查询语法)

  solr的一些查询语法

  1. 首先假设我的数据里fields有:name, tel, address 预设的搜寻是name这个字段, 如果要搜寻的数据刚好就是 name 这个字段,就不需要指定搜寻字段名称.

   2. 查询规则:

  如欲查询特定字段(非预设字段),请在查询词前加上该字段名称加 “:” (不包含”号) 符号,

   例如: address:北京市海淀区上地软件园 tel:88xxxxx1

  1>. q代表query input

   2>. version代表solr版本(建议不要变动此变量)

  3>. start代表显示结果从哪一笔结果资料开始,预设为0代表第一笔, rows是说要显示几笔数据,预设为10笔

  (因为有时查询结果 可能有几百笔,但不需要显示所有结果,所以预设是从第一笔开始到第十笔)

  所以若要显示第10到30笔就改为:

   http: //localhost:8080/solr/select/?indent=on&version=2.2&q=address:北京 市海淀区上地软件园+tel:88xxxxx1&version=2.2&start=10&rows= 20&indent=on

  (indent代表输出的xml要不要缩行.预设为开启 on)

  3. 另外,要限定输出结果的内容可用 “fl=” 加上你要的字段名称,如以下这个范例:

  http: //localhost:8080/solr/select/?indent=on&version=2.2&q=text:北京+ OR+text:亿度&start=0&rows=10&fl=name,address,tel

  在fl= 之后加上了name,adress,tel

  所以结果会如下:

<result name=”response” numFound=”1340″ start=”0″>
<doc>
<str name=”name”>北京亿度</str>
<str name=”address”>北京市海淀区上地软件园</str>
<str name=”tel”>88xxxxxx1</str>
</doc>
<doc>
<str name=”name”>北京亿度</str>
<str name=”address”/>
<str name=”tel”>88xxxxxx1</str>
</doc>
</result>

   5. 查询 name 或 address:直接输入查询词, 如: 亿度

  送出的内容即为:

  name:亿度 AND address:海淀

  6. 若要搜寻联集结果,请在词与词间空格或加上大写 “OR” (不包含”号).

   例如: text:海淀 OR text:亿度

  text:海淀 OR 亿度 

  或

  海淀 亿度

  或

  name:亿度 OR tel:88xxxxxx1

  或

   name:亿度 tel:88xxxxxx1

  5. 若要搜寻交集结果,请在词与词间加上大写 “AND” 或 “+” (不包含”号).

  例如: text:海淀 AND 亿度 

  或

  +text:海淀 +text:亿度

  或

  name:亿度 AND tel:88xxxxxx1

  或

   name: ( +亿度 +海淀)

  6. 排除查询

  在要排除的词前加上 “-” (不包含”号) 号

   例如: 海淀 -亿度

  搜寻结果不会有包含亿度的词的结果在内

  7. Group 搜寻

  使用 “()” 来包含一个group

  如希望搜寻在店名字段内同时有 “台北”(不包含”号) 及 “火车站”(不包含”号)

   8. 增加权重: 如要搜寻 “北京 加油站”(不包含”号) 但因为回传太多笔资料内有 “中华”(不包含”号) 或 “加油站”(不包含”号) 的结果,

  所以想要把有包含 “加油站”(不包含”号)的数据往前排,可使用 “^”(不包含”号)符号在后面加上愈增加的权重数,

   像是 “2″,则可以这样做:

  北京 加油站^2

  会同时搜寻含有北京或加油站的结果,并把加油站这个词加权所以 搜寻时会先判断加油站这一个词在

  搜寻结果中的比重,甚至假设一笔数据内加油站出现过两次以上的就更加会有优先权.

   查询时在查询词后加上 “^” (不包含”号) 再加上权重分数

  例如: 亿度 AND “北京”^2

  或

   亿度^2 OR 北京

  9. Wildcard 搜寻使用 “*” 符号; 如果输入 “中国*银” (不包含”号), 结果会有中国信托商业银行, 中国输出入银行图书阅览室, 中国商银证券

  中国及银之间可夹任何长短字词.



利用SOLR搭建企业搜索平台 之十(数据库数据导入到solr)

  solr不可谓是个好东西啊,越往下挖掘,他的各种功能逐渐的展现在我的面前,对于solr的架构 人员,不得不令人佩服啊。

  几天前偶尔看到IBM developmentWorks上面的一片文章,看到了数据库数据的导入,以前我一直是这么认为的,像这种导入可以自己去写程序去导入。

   写程序 可以将数据读出100条,如果你的内存够大,可以是1000条甚至更多,然后放入Collection中,批量提交至solr。或者读取数据写入xml文 件中,再将该文件提交到solr等等。但是,在我看到那一篇文章的时候,原来还有这么巧妙的招。

  废话不多说,入正题。

   一. 首先准备好solr的dataimport功能需要的东西,在solr的下载包中。分别在:

  1》Solr- 1.3.0/dist/apache-solr-dataimporthandler-1.3.0.jar

  2》 E:/education/search/Solr-1.3.0/example/example-DIH/solr/

  3》你是哪种 数据库,提供该数据库的jdbc驱动。

  二.如果你还不会运行solr,请参考本人的前几篇博客。这里要做的是,先把 E:/education/search/Solr-1.3.0 /example/example-DIH/solr/下面的东西拷贝到solr的HOME目录,然后删除rss,这个是另外一个功能是导入rss订阅信 息到solr中,确实很强,这都想到了。将jar文件,实际就 两个拷贝到tomcat的webapps下面的solr的WEB-INF的lib文件夹下 面。

  三.更改solr Home目录下的conf/solrconfig.xml,其实就是提交一个solrRequestHandler,代码如下:

   Xml代码

<requestHandler name="/dataimport"  class="org.apache.solr.handler.dataimport.DataImportHandler"> 
   <lst name="defaults"> 
   <str  name="config">C:/solr-tomcat/solr/db/conf/db-data-config.xml</str>  
  </lst> 
 </requestHandler>


  四.将solr Home目录下面的 solrconfig.xml和schema.xml拷贝到db文件夹下面的conf中。

  五.修改db/conf /db-data-config.xml

  Xml代码

<dataConfig> 
  <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"  url="jdbc:mysql://localhost:3306/tuitui" user="root"  password="mysql"/> 
  <document name="shop"> 
       <entity name="tuitui_shop" pk="shopId" query="select * from  tuitui_shop"> 
      <field column="shopid" name="shopId" />  
      <field column="shopName" name="shopName" /> 
       <field column="shopUrl" name="shopUrl" /> 
      <field  column="keyword" name="keyword" /> 
      <field  column="synopsis" name="synopsis" /> 
      <field  column="province" name="province" /> 
      <field  column="city" name="city" /> 
      <field column="domain"  name="domain" /> 
      <field column="address" name="address"  /> 
      <field column="coordinate" name="coordinate" /> 
       <field column="shopSspn" name="shopSspn" /> 
       <field column="phone" name="phone" /> 
      <field  column="createTime" name="createTime" /> 
    </entity> 
   </document> 
</dataConfig>

  其中的意思我做简单解释,具体大家可以去看看官方 wiki。
   document:一个文档也就是lucene的document这个没什么解释的;
   entity:主要针对的是 一个数据库表;
   filed:属性column是数据库的字段,name是filed的名字,即schema中的field name
   http://wiki.apache.org/solr/DataImportHandler
   我的数据库表结构发出来:



  六.启动TOMCAT,输入地址进行导入,导入 分为很多模式:我选用的全部倒入模式。
   http://localhost/solr/dataimport?command=full-import
  结果:
   00C:/solr-tomcat/solr/db/conf/db-data-config.xmlfull-importidle1202009-09-0521:28:08Indexing completed. Added/Updated: 2 documents. Deleted 0documents.2009-09-05 21:28:092009-09-05 21:28:090:0:0.579This responseformat is experimental. It is likely to change in the future.
  七.在去查询你刚才提交的数据,搞定。
  最后 在说说这个功能。上面的例子只不过是很简单的一个部分。针对solr的MultiCore,通过配置db-data-config.xml也可以实现,还 有多表,或者多表关联等等操作只要在db-data-config.xml配置清楚都可以进行数据的导入。
  在solr1.4中还有更多的扩 展功能,这些功能为重建索引提供能很方便的操作。而且, datasource不单单指的是database,可以是xml文件,还可以是来自网络上的等 等。


利用SOLR搭建企业搜索平台 之十一(中文分词之IK)

   在经过使用了庖丁以后,这里说说怎么将目前很火很流行的IK集成进SOLR,其实方法真的很简单,比 paoding方便不少。这里很感谢IK的作者,蓝山咖啡,很感谢你为中文分词做出的贡献。 作者博客:http://linliangyi2007.javaeye.com
   入正题:
  1》请先去作者博客参看IK下载地址,主要就是一个IKAnalyzer3.1.1Stable.jar。我这里用的是最新版!
  Java代码 package com.yeedoo.slor.tokenizer; 
 
import  java.io.Reader; 
 
import org.apache.lucene.analysis.TokenStream; 
import  org.apache.solr.analysis.BaseTokenizerFactory; 
import  org.wltea.analyzer.lucene.IKAnalyzer; 
 
public class  ChineseTokenizerFactory extends BaseTokenizerFactory { 
 
  @Override 
 public TokenStream create(Reader reader) { 
 return  new IKAnalyzer().tokenStream("text", reader); 
 } 
 
}


  从代码 就可以看得出来真的很方便!将它打包放入solr.war中同时还有IK的jar包。如果你不想打包,请去附件下载已经打好的包。
  2》配置 文件
  Xml代码 
<fieldType name="text" class="solr.TextField" positi> 
   <analyzer type="index"> 
  <tokenizer  class="com.yeedoo.slor.tokenizer.ChineseTokenizerFactory" /> 
   <filter class="solr.StopFilterFactory" ignoreCase="true"  words="stopwords.txt" enablePositi /> 
  <filter  class="solr.WordDelimiterFilterFactory" generateWordParts="1"  generateNumberParts="1" catenateWords="1" catenateNumbers="1"  catenateAll="0" split /> 
  <filter  class="solr.LowerCaseFilterFactory" /> 
  <filter  class="solr.EnglishPorterFilterFactory" protected="protwords.txt" /> 
   <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> 
   </analyzer> 
  <analyzer type="query"> 
   <tokenizer class="com.yeedoo.slor.tokenizer.ChineseTokenizerFactory"  /> 
  <filter class="solr.SynonymFilterFactory" syn  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" split /> 
  <filter  class="solr.LowerCaseFilterFactory" /> 
  <filter  class="solr.EnglishPorterFilterFactory" protected="protwords.txt" /> 
   <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> 
   </analyzer> 
 </fieldType>

http://lianj-lee.iteye.com/blog/424383
11.3 海岛微电网与工业园区的构网应用 海岛微电网与工业园区配电网是构网技术下沉应用的两大典型场景。海岛微电网以构网型储能为核心,解决孤岛系统稳定性问题,需具备黑启动、多能源协调和故障穿越能力;工业园区则侧重电能质量治理、并离网无缝切换和经济优化运行。两类场景均需解决多机并联稳定性、故障特性适配和分层协同控制等关键技术。构网型变流器的电压源构建能力、自适应控制策略及飞轮储能等特殊应用,为构建高可靠性、高经济性的分布式能源系统提供了创新解决方案。 阅读详情

相关推荐

频偏估计技术:从原理到5G应用的实战解析

本文深入解析了5G通信中的频偏问题及其核心技术。频偏如同调不准的旋钮,会导致信号失真与载波间干扰。文章详细拆解了整数倍与小数倍频偏估计两大核心方法,重点剖析了基于循环前缀和基于同步信号块的算法原理与优劣,并结合eMBB、mMTC、URLLC三大5G应用场景,提供了实战算法选择策略与参数调优避坑指南。

weixin_29218963的博客 261

solr 从零学习开始

开源企业搜索引擎SOLR的 应用教程                           2010-10  目 录   1     概述... 4 1.1       企业搜索引擎方案选型... 4 1.2       Solr的特性... 4 1.2.1       Solr使用Lucene并且进行了扩展... 4 1.2.2

2万+

工业视觉开发者的福音:用C#玩转VisionMaster算子(非方案版完整教程)

本文为工业视觉开发者提供了一份完整的C#与VisionMaster算子二次开发教程,详细介绍了环境配置、算子调用原理、性能优化技巧及实战案例。通过模板匹配和二维码识别等实例,展示了如何高效集成VisionMaster算子到现有框架中,提升工业自动化视觉检测系统的灵活性和性能。

weixin_29280657的博客 270

SOLR搭建企业搜索平台

一、SOLR搭建企业搜索平台--MultiCore Solr Multicore 是 solr 1.3 的新特性。其目的一个solr实例,可以有多个搜索应用。 我们知道你既可以把不同类型的数据放到同一index中,也可以使用分开的多indexes。基于这一点,你只需知道如何使用多 indexes(实际上就是运行Solr的多实例)。尽管如此,为每一个类型添加一个完整的Solr实例会显得太臃肿庞大。S...

江夏lz的博客 276

达梦数据库与sharding-jdbc的深度适配实践

本文详细介绍了达梦数据库与sharding-jdbc的深度适配实践,包括驱动与依赖管理、核心适配实现、注册与配置等关键步骤。通过扩展shardingSphere的方式,成功实现了达梦数据库的分库分表功能,并提供了常见问题解决方案和性能优化建议,助力企业级应用高效处理海量数据。

weixin_30300225的博客 623

人形机器人骨骼材料选型实战:从铝合金到碳纤维的5种方案对比

本文深入探讨人形机器人骨骼材料的选型策略,对比铝合金、镁合金、钛合金、碳纤维复合材料及3D打印材料等5种方案的性能优劣。通过建立强度-重量比、疲劳寿命等核心评价维度,结合具体应用场景,提供科学的材料决策方法论,助力开发者优化机器人结构设计,实现性能与成本的平衡。

weixin_29199873的博客 436

利用SOLR搭建企业搜索平台 之一

在网络上找了很多的关于solr的资料,发现非常的不全面,即使就是官方的wiki,也是如此!   基于现阶段正在研究的solr应 用,陆续的会分享我的一些经验!   今天要说的是: 怎么跑起来!   1》 首先下载好solr,我用的是 solr1.3,下载地址:   windows版本   http://labs.xiaonei.com/apache-m ... ache-solr-1.3.0.z...

lishoubin 321

【感知模块算法】障碍物detect+trace+prediction方向介绍

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、多维度看感知问题,体会复杂性二、障碍物/环境目标detect方向1.视觉目标检测方向(1)图像处理认知(2)视觉基础理论部分1、获取数据集---python网页爬虫、买数据、自己录数据、使用开源比赛的数据集2、opencv库的学习3、深度学习框架学习(3)视觉目标检测理论(1)目标检测的概念(2)目标检测的应用场景(3)现有目标检测框架原理及论文【这仅仅是我当初入门学习的框架~

qq_35635374的博客 2893

Apache Solr 概念、安装与导入数据库中表格的数据到索引(适合新手)

Solr 概念 从概念上,Solr 可以被分成四大块: 模式(schema.xml)配置(solrconfig.xml)索引搜索 要理解模式,需要先理解 Lucene 对 Document的注释。一个 Document包含一个或多个 Field。一个 Field由名称、内容和给出了内容的处理方法的元数据组成。分析内容可以使其被搜索到。而分析则是通过将一个 Tokenizer与零个

专注于Groovy语言,grails框架与管理之道 3414

模拟量输入功能块 S_ITR(Easy系列PLC完整ST源代码)

IN Input INT 输入数字量 1IN ISH INT 输入数字量上限 2IN ISL INT 输入数字量下限 3IN OSH REAL 输出工程量上限 4IN OSL REAL 输出工程量下限 5OUT OUTPUT REAL 输出工程量 6VAR temp1 REAL 临时变量1 7VAR temp2 REAL 临时变量2 8。

RXXW_Dor的博客 716

ZW3D 二次开发-制作插件

1.Windows 7 SP1 或 Windows 10 或 Windows 11(推荐 Windows 11)2.Visual studio 2017-2022 (或 C/C++的任何其他集成开发环境)(推荐 Visual studio 2022)3.ZW3D 2023 或以上版本(建议使用与 ZW3D 一致的 API 的版本)4.Qt5.9.7(for Windows)博主学习使用环境的是:Windows 11 Version 24H2 + Visual studio 2022 + Qt5.9.7(fo

fhqiwmc的博客 810

Solr 将数据库中table中数据导入到索引

Solr将数据库中table中的数据导入到索引  版权信息: 可以任意转载, 转载时请务必以超链接形式标明文章原文出处, 即下面的声明.  原文出处:http://tbwuming.iteye.com/blog/1152333  1、首先在MySQL中创建表,并写入数据  Sql代码   -- ----------------------------   -

gxsmydestiny的专栏 966

风控域——知识图谱相关原理

本文全面介绍了知识图谱在风控领域的应用原理。从基础知识入手,阐述了知识图谱的定义、概念及应用场景,重点聚焦于金融风控。进一步讲解了知识图谱的技术架构,涵盖计算、融合与构建等方面。深入探讨了知识表示、建模、抽取、挖掘、存储、融合、检索和推理等关键技术原理,并结合金融风控实际需求,详细说明了各技术环节的具体应用方法与流程,为构建高效风控知识图谱提供了理论与实践指导。

庄小焱 606

【solr】solr介绍及安装

一、Solr介绍 1.solr是什么? Solr是一种开放源码的、基于Lucene Java的搜索服务器,易于应用到Web应用程序中。易于安装和配置,而且附带了一个基于HTTP的管理界面。可以使用Solr的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。Solr具有特性如下: 高级的全文搜索功能 专为高通量的网络流量进行优化 基于开放接口(XML和HTTP)的标准 综合的HTML管...

凤凰涅槃 549

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Solr 全文检索服务器(一)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34228662的博客 205

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Solr全文检索服务器 (一)

  今天给大家分享的是Solr,如有不足,敬请指正。   那么我们首先要知道Solr是什么,我们都知道我们国内目前很火的某猫,某宝,某东,在这里就用到了Solr检索服务器。百度百科给出的解释是:Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作...

weixin_43974276的博客 294

solr--搭建全文搜索服务器

1.下载http://www-eu.apache.org/dist/lucene/solr/6.5.0/ 2.新建: 云模式 3.打开浏览器: 简单的中文分词,暂时是一个一个的分词: 转载于:https://www.cnblogs.com/lchzls/p/6704676.html...

weixin_30817749的博客 133

Solr从安装到使用 for Linux(详细教程)

solr概述及特点: 第一步: 配置Linux的环境 安装JDK (本教程使用的是JDK1.8)(略) 安装Tomcat (本教程使用的是Tomcat 8)(略) 安装Mysql (本教程使用的是Mysql 5.1.7)(略) 第二步: 下载solr的版本 下载最新版可以直接访问 链接: http://lucene.apache.org/solr/downloads...

MambaZzh的博客 1063

解决solr8.2增量定时导入solr-dataimportscheduler-1.1.jar包、不定时执行问题

首先solr已经提供了导入的功能,但是不能实现定时导入。 然后我就在网上找到了将solr-dataimportscheduler-1.1.jar放到solr-8.2.0\server\solr-webapp\webapp\WEB-INF\lib下,并配置了dataimport.proterties配置文件,但是一直未执行,害的我一直以为是增量配置有问题,搞了半天,最后我反编译了这个包,查看了一下...

dqb4531的博客 2087

利用SOLR搭建企业搜索平台

在网络上找了很多的关于solr的资料,发现非常的不全面,即使就是官方的wiki,也是如此!   基于现阶段正在研究的solr应用,陆续的会分享我的一些经验!   今天要说的是: 怎么跑起来!   1》 首先下载好solr,我用的是 solr1.3,下载地址:   windows版本   http://labs.xiaonei.com/apache-mirror/luc

u013244517的专栏 948

搜索学习--Solr全文搜索服务器的基本使用(一)——SolrJ的使用

作为一般的Lucene使用者,我们直接用Lucene虽然可以实现很多自己想要的自定义功能,但是对于一般的项目,为了方便开发和维护,我们通常会使用现成的搜索服务器。现在常用的有Solr和ElasticSearch。 对于Solr服务器如何搭建,Solr服务器的搭建,之前已经整理过,这次,我将使用SolrJ来调用Solr服务器。 在Solr中配置Core 在managed-schema中,主要

yyf的博客 1524

新版本solr安装

服务器centos7solr版本:7.3.1tomcat版本:9.0.7一、安装java环境想要使用solr第一步要先安装java环境使用命令:yum install java-1.8.0-openjdk* -y,等待安装就可以完成。二、安装solrsolr的各个版本下载地址1.下载solr解压把solr放到local目录下解压2.安装tomcattomcat9.0.7下载地址把tomcat也放到...

white_ShiKu的博客 639

solr 索引mysql DIH 链接

Download the JDBC Driver<br />Download the JDBC Driver for MySQL from http://mysql.spd.co.il/Downloads/Connector-J/mysql-connector-java-3.1.14.zip<br /> Put the "mysql-connector-java-3.1.14-bin.jar" in Solr Dir/example/libConfiguring Solr to Use MySQL<br

tattarrattat的专栏 3890

搜索学习--Elasticsearch全文搜索服务器的基本使用

前言之前我们使用Solr全文搜索服务器来建立我们自己的搜索,本篇文章将介绍跟Solr类似的另一种搜索服务器——Elasticsearch。就个人而言,Elasticsearch比Solr使用更方便,完全Http+Json也可以去使用。对于ElasticSearch服务器的部署,分布式,集群这里就先不介绍了。部署启动后,访问 http://127.0.0.1:9200/,显示如下类似信息,说明服务器已

yyf的博客 4731

(搜索引擎之solr) sorl运行环境的搭建及从mysql中导入数据创建索引

1:将dist目录下的solr-4.2.0.war 复制到tomcat 下的webapps根目录,重命名为solr.war,运行tomcat,solr.war被解压。 2:在tomcat根目录(可以是任何目录)新建文件目录solr/home,将solr-4.1.0\example下的solr复制到solr/home目录下,如果要配置多核,只用复制solr-4.1.0\example\mu

yuxiang1014的专栏 1102

FTServer 1.1 发布,多语言全文搜索服务器

开发四年只会写业务代码,分布式高并发都不会还做程序员? FTServer是一个简洁的多语言全文搜索服务器,能在低于2M...

weixin_34414196的博客 269

solr mysql增量导入_急急急,在线等!solr4.10结合oracle增量导入数据问题!

本人刚接触solr,不是很懂。做全量更新的时候能把数据导入进来并且添加索引,但是增量索引的时候总是出现以下情况,能获取到数据但是不能添加索引,请问各位大神什么原因啊LastUpdate...本人刚接触solr,不是很懂。做全量更新的时候能把数据导入进来并且添加索引,但是增量索引的时候总是出现以下情况,能获取到数据但是不能添加索引,请问各位大神什么原因啊Last Update: 15:38:56Re...

weixin_31232695的博客 253
上一篇: jquery高亮关键字
下一篇: 全文搜索服务器solr之客户端 - solrj二次开发
Y叔输得起
博客等级 码龄16年 15粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值