首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

lucene solr配备,集成到struts中

2012-10-18 
lucene solr配置,集成到struts中1.将下载的apache-solr-3.3.0.zip包进行解压。2.将目录下example/solr中的

lucene solr配置,集成到struts中

1.将下载的apache-solr-3.3.0.zip包进行解压。

2.将目录下example/solr中的文件拷到某一目录(solr.xml不能拷过去)。将此目录设为solr_home.并在tomcat的server.xml中加入如下内容:

?<Context docBase="mvn_struts2" path="/mvn_struts2"
?????reloadable="true" source="org.eclipse.jst.jee.server:mvn_struts2">
?????<Environment name="solr/home" type="java.lang.String"
??????value="C:\Users\Kevin\Downloads\apache-solr-3.3.0\apache-solr-3.3.0\example\solr"
??????override="true" />
????</Context>

3.在工程的web.xml中加入如下内容:

<filter>
??<filter-name>SolrRequestFilter</filter-name>
??<filter-class>org.apache.solr.servlet.SolrDispatchFilter</filter-class>
?</filter>

?<filter-mapping>
??<filter-name>SolrRequestFilter</filter-name>
??<url-pattern>/lucene/*</url-pattern>
?</filter-mapping>

?<servlet>
??<servlet-name>SolrServer</servlet-name>
??<servlet-class>org.apache.solr.servlet.SolrServlet</servlet-class>
??<load-on-startup>1</load-on-startup>
?</servlet>

?<servlet>
??<servlet-name>SolrUpdate</servlet-name>
??<servlet-class>org.apache.solr.servlet.SolrUpdateServlet</servlet-class>
??<load-on-startup>2</load-on-startup>
?</servlet>

?<servlet-mapping>
??<servlet-name>SolrServer</servlet-name>
??<url-pattern>/lucene/select/*</url-pattern>
?</servlet-mapping>

?<servlet-mapping>
??<servlet-name>SolrUpdate</servlet-name>
??<url-pattern>/lucene/update/*</url-pattern>
?</servlet-mapping>

4.在工程的struts.xml文件中加入如下内容:

<constant name="struts.action.excludePattern" value=".*/lucene/.*" />

5.在spring中加入任务,定时更新索引。更新索引代码如下:

@Scheduled(cron = "20 46 12 ? * *")
?public void createIndex() {
??String appPath = LuceneScheduler.class.getResource("/").toString();
??appPath = StringUtils.substringAfter(
????StringUtils.substringBefore(appPath, "WEB-INF"), "/");
??String docPath = appPath + "upload/";
??
??try {
???File file = new File(docPath);
???String urlString = constant.getUrl();
???StreamingUpdateSolrServer solr = new StreamingUpdateSolrServer(
?????urlString, 1, 1);
???
???solr.deleteByQuery( "*:*" );
???solr.blockUntilFinished();
???indexFilesSolrCell(file.listFiles(), solr);
??} catch (Exception e) {
???e.printStackTrace();
??}
?}

?private void indexFilesSolrCell(File[] fileList,
???StreamingUpdateSolrServer solr) throws IOException,
???SolrServerException, InterruptedException {
??for (File file : fileList) {
???if (file.isFile()) {
????ContentStreamUpdateRequest up = new ContentStreamUpdateRequest(
??????"/update/extract");
????up.addFile(file);
????up.setParam("uprefix", "attr_");
????up.setParam("fmap.content", "attr_content");
????up.setParam("literal.id", file.getPath());
????up.setAction(AbstractUpdateRequest.ACTION.COMMIT, false, false);
????solr.request(up);
????solr.blockUntilFinished();
????System.out.println("Analysis file:" + file.getPath());
???} else if (file.isDirectory()) {
????indexFilesSolrCell(file.listFiles(), solr);
???}
??}
?}

6.接下来,便可对已索引的文件进行全文检索,如下是struts中的action类内容:

@Autowired
?private Constant constant;
?private String search;
?private List<SearchItem> searchItemList = new ArrayList<SearchItem>();

?public String list() {
??String urlString = constant.getUrl();
??try {
???StreamingUpdateSolrServer solr = new StreamingUpdateSolrServer(
?????urlString, 1, 1);

???if (StringUtils.isNotBlank(search)) {
????QueryResponse rsp = solr.query(new SolrQuery("attr_content:"
??????+ search));
????SolrDocumentList solrDocumentList = rsp.getResults();
????for (SolrDocument solrDocument : solrDocumentList) {
?????SearchItem searchItem = new SearchItem();

?????searchItem.setHref(solrDocument.getFieldValue("id")
???????.toString());
?????String content = removeSpecial(solrDocument.getFieldValue(
???????"attr_content").toString());
?????content = StringUtils.left(content, 30);
?????searchItem.setContent(content);

?????String title = "";
?????Object titleO = solrDocument.getFieldValue("title");
?????if (titleO == null) {
??????title = StringUtils.left(content, 10);
?????} else {
??????title = removeSpecial(titleO.toString());
?????}
?????searchItem.setTitle(title);

?????searchItemList.add(searchItem);
????}
???}
??} catch (Exception e) {
???e.printStackTrace();
??}
??return "list";
?}

?private String removeSpecial(String str) {
??str = StringUtils.substringAfter(str, "[");
??str = StringUtils.substringBeforeLast(str, "]");
??str = StringUtils.trim(str);
??return str;
?}

?public String getSearch() {
??return search;
?}

?public void setSearch(String search) {
??this.search = search;
?}

?public List<SearchItem> getSearchItemList() {
??return searchItemList;
?}

?public void setSearchItemList(List<SearchItem> searchItemList) {
??this.searchItemList = searchItemList;
?}

1 楼 mythet 2012-08-13   上面的配置有问题,测试半天都访问不了,原因是web.xml缺少了关键的配置。

<filter>
     <filter-name>SolrRequestFilter</filter-name>
     <filter-class>org.apache.solr.servlet.SolrDispatchFilter
     </filter-class>
  <init-param>
      <param-name>path-prefix</param-name>
      <param-value>/lucene</param-value>
     </init-param>

</filter>

热点排行