我想将搜索引擎Solr添加到我的Java应用程序中。我想在Solr中索引一些信息,但不是所有信息,因为我的数据库非常特定。
我不想解释一切,因为它很复杂,所以我将使用一个简单的例子。
假设我有一个名为T的表,有两列col1和col2: col1 | col2
------------------|----------
some text... | 123
another text... | 41
bla bla... | 124
我只想索引Solr引擎中的col1列。我不想索引col2列在Solr -我知道这是可能的,但我不想这样做。
在我的应用程序的搜索中,我想从两个列中过滤信息。例如,我需要在col1中获得"Lorem ipsum dolorem"的行,并且在col2中具有范围[5,163]的值。
我该怎么做?
我使用PostgreSQL和Hibernate,但也许我会改变它MongoDB
首先,在您的示例中,如果您不想索引col2,但您确实希望使用特定于col2的过滤器进行搜索,您是否计划在结果之上手工编写一些过滤器?因为要过滤某些东西,它必须是索引的一部分…对吧?
我找到了一篇关于通过JDBC处理程序jar将Solr连接到mysql的博客文章,并且我找到了一个PostgreSQL JDBC jar的特定语法示例。
把这两个放在一起,我推测步骤将是(根据需要调整,因为可能你已经有了部分工作):
- 在
solrconfig.xml
put中:<lib dir="../../../dist/" regex="solr-dataimporthandler-d.*.jar" /> <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">db-data-config.xml</str> </lst> </requestHandler>
- 将此添加到您的
schema.xml
:<dynamicField name="*_name" type="text_general" multiValued="false" indexed="true" stored="true" />
- 添加一个
db-data-config.xml
类似于链接的博客文章,但有类似的东西(我已经删除了限制,不确定postgreSQL是否有不同的限制语法):<dataConfig> <dataSource type="JdbcDataSource" driver="org.postgresql.Driver" url="jdbc:postgresql://host/db" user="user" password="password" /> <document> <entity name="T" query="select col1 as 'col1' from T;" /> </document> </dataConfig>
还可以查看另一篇关于facet的详细信息,这可能有助于您完成一些您希望完成的过滤。