【问题标题】:how solr search works with contains +phonesolr search 如何处理 contains +phone
【发布时间】:2019-10-07 10:17:26
【问题描述】:

实际字符串:32498516141,+32498516141

convertedString = ParamNames.OPEN_PARENTHISIS + actualString + ParamNames.CLOSE_PARENTHISIS;

当我们使用 +32498516、+3249、32498516,324 等进行搜索时,包含无法在 solr 中运行的搜索

【问题讨论】:

标签: search solr contains


【解决方案1】:

如果要按单词的一部分进行搜索,则需要应用,例如,N-Gram Tokenizer,<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>

例如。

在:"bicycle"

输出:"bicy", "bicyc", "icyc", "icycl", "cycl", "cycle", "ycle"

在这种情况下,您将能够按单词的一部分进行搜索。您需要为两个分析器应用 NGramTokenizerFactory:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="false">
    <analyzer type="index">
      <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
  </fieldType>

您也可以试试下面的查询分析器。这完全取决于您的要求。

<analyzer type="query">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>

您可以修改或添加schema.xml 中的字段类型并将其应用于您的字段。 完成后重新启动服务器,重新索引数据。如果数据匹配,您可以使用 solr 管理工具为您的字段验证上述 fieldType。

我使用了以下字段类型,并使用 solr 工具进行了分析。

这是字段类型:

    <fieldType name="custome_field_type" class="solr.TextField" positionIncrementGap="100" multiValued="false">
        <analyzer type="index">
          <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>
          <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
          <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="query">
          <tokenizer class="solr.KeywordTokenizerFactory"/>
        </analyzer>
   </fieldType>

请找到显示在索引和查询数据时如何创建令牌的图像。它还会突出显示匹配项。

【讨论】:

  • 但是电话号码有这样的情况呢:输入:32498516141,+32498516141,输出:32,324,249,8516,16141,+32,+324,249,8516,16141,+32498516,+324985,+324918
  • @SatishPrasad:这个答案对您解决问题有帮助吗?
  • 感谢@Abhijit Bashetti。我得到了你的答案,但是在我的本地系统中,solr 无法使用特殊字符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多