繁体   English   中英

在SOLR中使用类似操作

[英]Using like operation in SOLR

我正在使用SOLR搜索引擎。

几天前,我提出了对给定列执行类似操作的要求。

例如:

Column name: Name

Content: Stackoverflow is good.

查询为

Name:("*overflow is*")

该查询应为我提供特定的“ Stackoverflow很好”。 结果是

此输入参数应视为整体输入。 不应将其视为自由文本搜索。 它应该在SQL中像“喜欢”操作一样工作。

为此,请使用此配置。

<fieldtype class="solr.TextField" name="string_wildcards" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.TrimFilterFactory" />
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.TrimFilterFactory" />
        <filter class="solr.KeywordTokenizerFactory"/>
      </analyzer>
    </fieldtype>

该查询没有给我“喜欢”操作所期望的结果。

例如:名称:(“ 溢出为 ”)

会搜索为“自由文本”,而不是“ LIKE”运算符。

它给我结果

  1. 什么是溢出。
  2. 我叫ABC
  3. 什么是溢出
  4. Stackoverflow很好。

我的预期结果只是第4点,其中上述配置给了我全部4个结果,这是错误的。

请根据我的要求为我提供正确的配置。

关键是,您可以使用StandardTokenizerFactory拆分/标记输入。 在这种情况下,您搜索*overflow and is*

但是:左侧的通配符,例如

*溢出

默认情况下,solr不支持。 在这种情况下,您必须索引字段(列)“名称”两次。

这意味着:从类型string_wildcards添加一个文件名,你写了添加第二场-让调用它eman :从类型left_wildcards_string(逆转名称)。 在此字段类型定义中,添加solr.ReversedWildcardFilterFactory

最后,您可以跨两个字段进行搜索。

关键字之间的默认布尔参数为OR,这就是为什么您获得全部4个结果的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM