【问题标题】:Query with Solr and MySQL in JAVA在 JAVA 中使用 Solr 和 MySQL 进行查询
【发布时间】:2014-12-02 19:12:18
【问题描述】:

我有一个用 Solr 索引的 MySQL 数据库,出于我的目的,我需要查询这个数据库中的数据。 我想执行“软”查询,就像网络上的每个搜索引擎一样。

我正在尝试在 schema.xml 中设置两个示例字段

<uniqueKey>organization_id</uniqueKey>

<field name="organization_id" type="string" indexed="true" stored="true" required="true"/>
<field name="name" type="string" indexed="true" stored="true"/>

这是我的 solrconfig.xml

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

最后,data-config.xml

<dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/organizations2" user="****" password="****" /> <document name="content"> <entity name="id" query="SELECT * FROM organization" deltaImportQuery="SELECT * FROM organization" deltaQuery="SELECT * FROM organization"> <field column="organization_id" name="organization_id" /> <field column="name" name="name" /> </entity> </document> </dataConfig>

是否可以使用相似的组织名称进行经典查询,然后返回正确的公司? 我试图搜索一整天但没有解决方案。

非常感谢

【问题讨论】:

    标签: java mysql sql xml solr


    【解决方案1】:

    首先通过检查 8983 端口的 solr Admin 来确保 solr 实例为 running

    接下来是看看您是否能够从 solr Admin query 屏幕进行搜索。

    schema.xml 中的名称字段可以是“text_string”而不是“string”,以支持LIKE 查询。

    由于我不确定您是否正在寻找一种基于问题从 Java 程序中搜索的方法,以下列出了从 Java 中搜索的选项: 您可以使用 Apache 的 solrj 包或通过 URLOpener+InputStreamReader+xpath 组合从 Java 中搜索。

    示例 java sn-p 使用 solrj 搜索数据:

    HttpSolrServer solr = new HttpSolrServer("http://localhost:8983/solr");
    SolrQuery query = new SolrQuery();
    query.setQuery("company name");
    

    使用 URLOpener+InputStreamReader+xpath 搜索数据的 java sn-p 示例:

    String solrQuery = "http://localhost:8983/solr/select/?q=company name";
    URLOpener uop = new URLOpener();
    URLConnection conn= uop.openURL(solrQuery);
    BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    //Read the contents into string variable qryContent
    Document xmlDocument = 
    DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(
    new ByteArrayInputStream(qryContent.getBytes()));
    XPath xPath =  XPathFactory.newInstance().newXPath();
    XPathExpression xPathExpression = xPath.compile(expression);
    String titleExpression = "/response/result/doc/arr[@name='name']/str";
    NodeList allTitleNodes = 
    (NodeList)xPathExpression.evaluate(titleExpression,XPathConstants.NODESET);
    

    【讨论】:

    • 是的,我正在寻找一种从 Java 程序中进行搜索的方法,特别是我正在使用 Play Framework 开发一个 Web 应用程序,并且我需要在使用 Solr 索引的数据库中进行搜索。
    • 不行,必须指定公司的完整和正确名称。我需要基于相似名称的公司,而不是确切的名称。
    • @Fabio 尝试在您的 shcmea.xml 中添加 solr.NGramFilterFactorysolr.EdgeNGramFilterFactory 以执行部分​​单词的搜索。示例:&lt;filter class="solr.NGramFilterFactory" mingramsize="3" maxgramsize="25"/&gt; 用于字段类型 solr.TextField
    • 我不明白它是如何工作的,Solr 中的模糊搜索呢?
    猜你喜欢
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2015-12-27
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多