Java 如何配置SOLR服务器的拼写检查功能

Java 如何配置SOLR服务器的拼写检查功能,java,configuration,solr,lucene,Java,Configuration,Solr,Lucene,我想使用MySql数据库实现Solr提供的拼写检查功能,但我不知道如何实现。 这里是我想做的基本流程 我有一个简单的inputText(在JSF中),如果我键入单词shwo,对OutputLabel的响应应该是show 首先,我使用以下工具和框架: JBoss应用服务器6.1。 日食 JPA JSF(Primefaces) 到目前为止我已经完成的步骤: 第1步: 从以下位置下载Solr服务器: 提取内容 第二步: 添加到环境变量(其中有solr服务器): 第三步: 打开solr-war并添加到s

我想使用MySql数据库实现Solr提供的拼写检查功能,但我不知道如何实现。
这里是我想做的基本流程

我有一个简单的inputText(在JSF中),如果我键入单词shwo,对OutputLabel的响应应该是show

首先,我使用以下工具和框架:

JBoss应用服务器6.1。
日食
JPA
JSF(Primefaces)

到目前为止我已经完成的步骤:

第1步: 从以下位置下载Solr服务器: 提取内容

第二步: 添加到环境变量(其中有solr服务器):

第三步:

打开solr-war并添加到solr.war\WEB-INF\WEB.xml的env条目-(简单的方法)

我还添加了data-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
  <dataSource type="JdbcDataSource" name="altadict"
    driver="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/myproject"
    user="root"
    password=""
  />

  <document name="myproject">
    <entity name="myproject" query="SELECT * FROM words">
      <field column="Id" name="Id" />
      <field column="Cuvint" name="Cuvint" />
      <field column="TradDiac" name="TradDiac" />
      <field column="Explicatie" name="Explicatie" />
      <field column="TipCuvint" name="TipCuvint" />
      <field column="ItalicParant" name="ItalicParant" />
    </entity>
  </document>
</dataConfig>
<!-- altadict Request Handler -->

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

<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
  <lst name="defaults">
    <str name="df">Cuvint</str> 
    <str name="spellcheck.dictionary">default</str> 
    <str name="spellcheck">on</str>
    <str name="spellcheck.extendedResults">true</str> 
    <str name="spellcheck.count">10</str>
    <str name="spellcheck.maxResultsForSuggest">5</str> 
    <str name="spellcheck.collate">true</str>
    <str name="spellcheck.collateExtendedResults">true</str> 
    <str name="spellcheck.maxCollationTries">10</str>
    <str name="spellcheck.maxCollations">5</str> 
  </lst>
  <arr name="last-components">
    <str>spellcheck</str>
  </arr>
</requestHandler>

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
  <str name="queryAnalyzerFieldType">string</str> <!-- Replace with Field Type of your schema -->
  <lst name="spellchecker">
    <str name="name">default</str>
    <str name="field">examplew</str> <!-- Replace with field name as per your scheme -->
    <str name="spellcheckIndexDir">./spellchecker</str>
    <str name="buildOnOptimize">true</str>
    <str name="buildOnCommit">true</str>
  </lst>

  <!-- a spellchecker that uses a different distance measure -->
  <lst name="spellchecker">
    <str name="name">jarowinkler</str> 
    <str name="field">spell</str>
    <str name="distanceMeasure">org.apache.lucene.search.spell.JaroWinklerDistance</str>
    <str name="spellcheckIndexDir">./spellchecker2</str>
  </lst>
</searchComponent>

schema.xml

<field name="Id" type="tlong" indexed="true" stored="true" required="true"/>
<field name="Cuvint" type="string" indexed="true" stored="true" required="true"/>
<field name="TradDiac" type="string" indexed="true" stored="true" required="true"/>
<field name="Explicatie" type="string" indexed="true" stored="true"/>
<field name="TipCuvint" type="string" indexed="true" stored="true" required="true"/>
<field name="ItalicParant" type="string" indexed="true" stored="true"/>

solrconfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
  <dataSource type="JdbcDataSource" name="altadict"
    driver="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/myproject"
    user="root"
    password=""
  />

  <document name="myproject">
    <entity name="myproject" query="SELECT * FROM words">
      <field column="Id" name="Id" />
      <field column="Cuvint" name="Cuvint" />
      <field column="TradDiac" name="TradDiac" />
      <field column="Explicatie" name="Explicatie" />
      <field column="TipCuvint" name="TipCuvint" />
      <field column="ItalicParant" name="ItalicParant" />
    </entity>
  </document>
</dataConfig>
<!-- altadict Request Handler -->

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

<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
  <lst name="defaults">
    <str name="df">Cuvint</str> 
    <str name="spellcheck.dictionary">default</str> 
    <str name="spellcheck">on</str>
    <str name="spellcheck.extendedResults">true</str> 
    <str name="spellcheck.count">10</str>
    <str name="spellcheck.maxResultsForSuggest">5</str> 
    <str name="spellcheck.collate">true</str>
    <str name="spellcheck.collateExtendedResults">true</str> 
    <str name="spellcheck.maxCollationTries">10</str>
    <str name="spellcheck.maxCollations">5</str> 
  </lst>
  <arr name="last-components">
    <str>spellcheck</str>
  </arr>
</requestHandler>

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
  <str name="queryAnalyzerFieldType">string</str> <!-- Replace with Field Type of your schema -->
  <lst name="spellchecker">
    <str name="name">default</str>
    <str name="field">examplew</str> <!-- Replace with field name as per your scheme -->
    <str name="spellcheckIndexDir">./spellchecker</str>
    <str name="buildOnOptimize">true</str>
    <str name="buildOnCommit">true</str>
  </lst>

  <!-- a spellchecker that uses a different distance measure -->
  <lst name="spellchecker">
    <str name="name">jarowinkler</str> 
    <str name="field">spell</str>
    <str name="distanceMeasure">org.apache.lucene.search.spell.JaroWinklerDistance</str>
    <str name="spellcheckIndexDir">./spellchecker2</str>
  </lst>
</searchComponent>

data-config.xml
库文特
违约
在…上
真的
10
5.
真的
真的
10
5.

主页教程:

Solr Wiki:
---solrj官方文档

解决方案配置:

防堆叠溢出:

Solr数据库集成:

Solr拼写检查:





我真的需要你的帮助。问候。

使用
DataImoprtHandler
将您的数据库导入到Solr中,以便能够在Solr中搜索拼写。

1.我如何与数据库建立数据库连接并搜索内容,以查看是否有匹配的单词

您需要将数据从MySql索引到Solr。
这可以通过构建一个应用程序从MySql读取记录并将数据提供给Solr来实现。
或者,正如已经回答的那样,使用它将使您能够 连接到MySql,加载数据并将其索引到Solr中。 此外,还允许您执行增量更新

2.如何进行配置(solr config.xml、shema.xml等)

拼写检查器的字段应标记为文本分析。
由于字段标记为字符串,因此没有标记。
Schema.xml


此外,对于SoReCuff.xml,替换要考虑拼写建议

的字段
examplew
检查是否有错误

3.如何从我的视图(xhtml)发送字符串,以便solr服务器知道他在寻找什么

通常,我们在Solr请求中结合搜索和拼写建议来实现此功能。
当我们没有从Solr获得任何结果时,我们会检查拼写检查建议是否可用,并显示为
您的意思是
建议吗
此外,我们没有等待拼写建议,而是向用户提供提前输入建议,以防止往返服务器

4.如何从Cuvine数据库列获取正确的单词,例如wodr I希望solr返回单词


检查以配置拼写检查,这应该会提供建议。

同意您的意见,但根据我所读的内容,我需要创建一个schema.xml,其中包含数据库中的确切字段,请将其添加到solr config.xml。我需要一些傻瓜示例:)+1对于含义,如我所知,SOLR4.4-4.5是无模式的。阅读,如何在不创建模式的情况下进行。但是,如果只想对1个字段进行拼写,则很容易为每个文档只配置1个字段(使用Solr随附的示例中的一个字段)。
<!-- altadict Request Handler -->

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

<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
  <lst name="defaults">
    <str name="df">Cuvint</str> 
    <str name="spellcheck.dictionary">default</str> 
    <str name="spellcheck">on</str>
    <str name="spellcheck.extendedResults">true</str> 
    <str name="spellcheck.count">10</str>
    <str name="spellcheck.maxResultsForSuggest">5</str> 
    <str name="spellcheck.collate">true</str>
    <str name="spellcheck.collateExtendedResults">true</str> 
    <str name="spellcheck.maxCollationTries">10</str>
    <str name="spellcheck.maxCollations">5</str> 
  </lst>
  <arr name="last-components">
    <str>spellcheck</str>
  </arr>
</requestHandler>

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
  <str name="queryAnalyzerFieldType">string</str> <!-- Replace with Field Type of your schema -->
  <lst name="spellchecker">
    <str name="name">default</str>
    <str name="field">examplew</str> <!-- Replace with field name as per your scheme -->
    <str name="spellcheckIndexDir">./spellchecker</str>
    <str name="buildOnOptimize">true</str>
    <str name="buildOnCommit">true</str>
  </lst>

  <!-- a spellchecker that uses a different distance measure -->
  <lst name="spellchecker">
    <str name="name">jarowinkler</str> 
    <str name="field">spell</str>
    <str name="distanceMeasure">org.apache.lucene.search.spell.JaroWinklerDistance</str>
    <str name="spellcheckIndexDir">./spellchecker2</str>
  </lst>
</searchComponent>
<field name="Cuvint" type="text" indexed="true" stored="true" required="true"/>
<str name="field">examplew</str> <!-- Replace with field name as per your scheme -->