1

使用 roo 我生成了以下 spring bean

<bean class="org.apache.solr.client.solrj.impl.CommonsHttpSolrServer" id="solrServer">
    <constructor-arg value="${solr.serverUrl}"/>
</bean>

配置文件有

solr.serverUrl=http\://localhost\:8983/solr

使用如下:

@Autowired
transient SolrServer Address.solrServer;

@Async
public static void Address.indexAddresses(Collection<Address> addresses) {
    List<SolrInputDocument> documents = new ArrayList<SolrInputDocument>();
    for (Address address : addresses) {
        SolrInputDocument sid = new SolrInputDocument();
        sid.addField("id", "address_" + address.getId());
        sid.addField("address.id_i", address.getId());
        // Add summary field to allow searching documents for objects of this type
        sid.addField("address_solrsummary_t", new StringBuilder().append(address.getId()));
        documents.add(sid);
    }
    try {
        SolrServer solrServer = solrServer();
        solrServer.add(documents);
        solrServer.commit();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我的问题是:

我是否必须在 solr 中创建模式才能在 solr 中对其进行索引,或者此代码是否足够好?

除此之外,我的应用程序是一个多层架构,网站只是其中的一小部分。那么我怎么能删除被 Windows 应用程序或 android 应用程序删除的数据。

一种解决方案可能是重新创建索引,但它不会导致 solr 中的统计信息丢失,用于使搜索结果更有效(我不确定)?

我如何在 solr 中添加同义词搜索以及如何初始化拼写错误插件(单词可能是人名或地名,基本上不是来自字典)?

很抱歉合并了多个问题。在此先感谢您的帮助。

4

1 回答 1

2

我是否必须在 solr 中创建模式才能在 solr 中对其进行索引,或者此代码是否足够好?

是的,您应该有 schema.xml 文件,并且您应该在那里定义要索引的字段。

除此之外,我的应用程序是一个多层架构,网站只是其中的一小部分。那么我怎么能删除被 Windows 应用程序或 android 应用程序删除的数据。

您可以使用以下代码片段删除文档。假设有一个值为 12345 的字段 id。您可以在<query>标签之间编写查询。

http://localhost:8983/solr/update?stream.body=<delete><query>id:12345</query></delete>&commit=true

一种解决方案可能是重新创建索引,但它不会导致 solr 中的统计信息丢失,用于使搜索结果更有效(我不确定)?

AFAIK,默认情况下不保存搜索统计信息,因此重新创建索引可能是一种解决方案。

我如何在 solr 中添加同义词搜索以及如何初始化拼写错误插件(单词可能是人名或地名,基本上不是来自字典)?

您可以将 SynonymFilterFactory 添加到 schema.xml 文件中的字段定义。

于 2012-12-11T20:15:55.287 回答