Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
Php Solr短语搜索需要匹配部分单词_Php_Search_Solr_Lucene_Solr Schema - Fatal编程技术网

Php Solr短语搜索需要匹配部分单词

Php Solr短语搜索需要匹配部分单词,php,search,solr,lucene,solr-schema,Php,Search,Solr,Lucene,Solr Schema,使用Solr搜索英语和朝鲜语文档,到目前为止,朝鲜语搜索工作正常。还需要扩展英语精确短语以匹配部分单词 我使用的Solr查询: content: "He go" 他走了,他走了,他进球了,等等 我试过用这些,但没用 content: "He go"* 当前字段模式 <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> <analyzer type="inde

使用Solr搜索英语和朝鲜语文档,到目前为止,朝鲜语搜索工作正常。还需要扩展英语精确短语以匹配部分单词

我使用的Solr查询:

content: "He go"
他走了,他走了,他进球了,等等

我试过用这些,但没用

content: "He go"*
当前字段模式

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.CJKBigramFilterFactory" han="false" hiragana="false" katakana="false" hangul="true" outputUnigrams="true" />
    </analyzer>
</fieldType>

因此,我的输入和预期输出如下:

输入:他去(带引号)
输出:他走了,他走了,他的目标(应该与有这些词的文档匹配,可以是部分匹配)


我如何实现此功能,非常感谢您的任何建议。

如果您想按单词的各个部分进行搜索,您需要应用,例如,N-Gram标记器,

例如

在:
“自行车”

输出:
“bicy”、“bicy”、“icyc”、“icycl”、“cycle”、“cycle”、“cycle”、“cycle”

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

<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.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
  </fieldType>
请从solr管理工具中找到相同的分析

支持短语中的内联通配符。在您的情况下,将
inoorder=true
附加到参数将提供您想要的行为

您应该注意以下几个限制:

性能对所使用的唯一术语的数量非常敏感 与模式相关的。例如,搜索“a*”将形成 一个大的或条款(从技术上讲是一个有许多术语的span或span) 索引中以开头的指定字段的术语 单字母“a”。将通配符限制在至少 两个或最好是三个字母作为前缀。允许非常短的时间 前缀可能导致返回许多低质量的文档

请注意,它还支持前导通配符“*a”以及 由此产生的性能影响。应用 索引时间分析中的ReversedWildcardFilterFactory通常是一个很好的方法 想法


这是完美的一个。我不知道这件事。
<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.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>
    <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"/>
          <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
   </fieldType>