[solr] 三步建立 solr 应用,,,java,PHP 调用solr 代码

imjl 2010-02-08
首先自己保证你的tomcat能跑起来。

第一步:在tomcat的conf目录下新建Catalina目录,在Catalina目录下新建localhost目录,在localhost目录下新建solr.xml

solr.xml内信息如下:
<Context docBase="/Volumes/mac_2/data/apache-solr-1.4.0.war" debug="0" crossContext="true" >
   <Environment name="solr/home" type="java.lang.String" value="/Volumes/mac_2/data/solr" override="true" />
</Context>                                                      


docBase 和 value的内容请根据自己情况来定义。

data的zip我上传了。。下载地址:http://dl.iteye.com/topics/download/4027b059-1173-3660-9d71-f63d6491372f

第二步:
保证tomcat链接时是utf-8.。。在tomcat的conf目录下找到server.xml,,,
在原有基础上增加 URIEncoding="UTF-8"
<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8" />  


第三步:
浏览器打开http://localhost:8080/solr/admin,看到管理界面就是ok拉。
测试下分词:打开http://localhost:8080/solr/admin/analysis.jsp
在Field这里选择 type,,,对应的输入text_cn
Field value这里两个选择框都打钩,,输入任意中文
点Analyze,,就能看到使用的分词和它如何分词的。


说明:solr管理界面支持firefox,safari有问题。这里只是简单搭建,没有优化。

solr官方网站 http://lucene.apache.org/solr/
wiki   http://wiki.apache.org/solr/FrontPage


imjl 2010-02-09
一个简单的java调用

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package solrjexample;

/**
 *
 * @author liuping
 */
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
import java.net.MalformedURLException;


public class Main {
  public static void main(String[] args) throws MalformedURLException, SolrServerException {

    SolrServer server = new CommonsHttpSolrServer("http://localhost:8080/solr");

    ModifiableSolrParams params = new ModifiableSolrParams();
    // 查询关键词
    params.set("q", "2010");
    // 分页,,start=0就是从0开始,,rows=5当前返回5条记录,,,第二页就是变化start这个值为5就可以了。
    params.set("start", 0);
    params.set("rows", 5);

    // 排序,,如果按照id 排序,,那么将score desc 改成 id desc(or asc)
    params.set("sort", "score desc");

    // 返回信息  * 为全部  这里是全部加上score,如果不加下面就不能使用score
    params.set("fl", "*,score");
    
    QueryResponse response = server.query(params);
    // 搜索得到的结果数
    System.out.println("Find:"+ response.getResults().getNumFound()+"\n\n");

    // 输出结果
    for(SolrDocument doc:response.getResults())
    {
        System.out.println("id: " + doc.getFieldValue("id").toString());
        System.out.println("title: " + doc.getFieldValue("title").toString()+"\n");
    }
  }
  
}
imjl 2010-02-09
php的code最短

在solrconfig.xml将这两个注释去掉
<queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
<queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>

PHP  发挥PHP数组信息

$code = file_get_contents('http://localhost:8983/solr/select?q=iPod&wt=php');
eval("\$result = " . $code . ";");
print_r($result);



PHPS  返回序列化信息,注意:一些中文可能在反序列化时丢失信息。
$serializedResult = file_get_contents('http://localhost:8983/solr/select?q=iPod&wt=phps');
$result = unserialize($serializedResult);
print_r($result);
zouershun 2011-08-10
在Field这里选择 type,,,对应的输入text_cn  会报Unknown Field Type: text_cn
yjp0501 2011-08-26
同上,怎么解决,或者说有哪些 type
yjp0501 2011-08-30
试了一下,text是存在的,text_cn不存在,text可以中文分词,只是中文分词是默认的一个字分一个,比如“今天上午”,它会分成 ‘今’‘天’‘上’‘午’四个,而不是‘今天’‘上午’这两个
Global site tag (gtag.js) - Google Analytics