Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SOLR中使用like运算_Java_Solr - Fatal编程技术网

Java 在SOLR中使用like运算

Java 在SOLR中使用like运算,java,solr,Java,Solr,我正在使用SOLR搜索引擎 几天前,我提出了在给定列上执行类似操作的要求 例如: 疑问是 Name:("*overflow is*") 这个查询应该给我提供具体的信息 “Stackoverflow很好。”因此 该输入参数应视为一个整体输入。不应将其视为自由文本搜索。它应该像SQL中的“like”操作一样工作 为此,iam使用此配置 <fieldtype class="solr.TextField" name="string_wildcards" positionIncrementGap=

我正在使用SOLR搜索引擎

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

例如:

疑问是

Name:("*overflow is*")
这个查询应该给我提供具体的信息 “Stackoverflow很好。”因此

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

为此,iam使用此配置

<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”操作的预期结果提供结果

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

将搜索为自由文本,而不是像“like”运算符

它给我的结果是

  • 什么是溢出
  • 我叫ABC
  • 什么是溢出
  • 这很好
  • 我的预期结果只有第4点,上面的配置给出了所有4个结果,这是错误的


    请帮助我为我的需求提供正确的配置。

    关键是,您可以使用StandardTokenizerFactory分割/标记您的输入。 在这种情况下,您搜索
    *溢出
    ,而
    是*

    但是:左边的通配符,比如

    *溢出

    默认情况下,solr不支持。 在这种情况下,必须为字段(列)“Name”编制两次索引

    这意味着:从类型string\u通配符中添加一个文件名,正如您编写的添加第二个字段一样-让我们从类型left\u通配符\u string中将其称为
    eman
    (反向:名称)。在此字段类型定义中,添加


    最后,您将搜索范围扩展到两个字段。

    关键字之间的默认布尔参数为或,这就是为什么您会得到所有4个结果。

    :)对此表示抱歉。我想知道,符合我要求的正确配置。是的,我可以从查询中删除*。但它并没有给我结果。我应该更改或添加任何标记器类吗?请查看我更改的答案。
    <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>