Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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 lucene中句子的LIKE功能_Java_Solr_Lucene_Lucene.net - Fatal编程技术网

Java lucene中句子的LIKE功能

Java lucene中句子的LIKE功能,java,solr,lucene,lucene.net,Java,Solr,Lucene,Lucene.net,我试图在Lucene中复制SQL的类似功能 如果我使用通配符搜索,比如“*Tulips Inn Riyadhh*”我将面临以下行为: 利雅得郁金香酒店 里亚德赫斯郁金香酒店-不匹配 利雅得hhss郁金香酒店 郁金香-匹配 Riyadhh-匹配 实际上,我需要Lucene中的一个例子,其中条件“2”应该匹配,“4”不应该匹配 我尝试了所有查询,但第二个场景不匹配 有些人建议使用标记器和自定义分析器 由于我是Lucene的新手,我处理过查询,但不知道如何将标记器和自定义分析器集成到我们的查询中。如果

我试图在Lucene中复制SQL的类似功能

如果我使用通配符搜索,比如“*Tulips Inn Riyadhh*”我将面临以下行为:

  • 利雅得郁金香酒店
  • 里亚德赫斯郁金香酒店-不匹配
  • 利雅得hhss郁金香酒店
  • 郁金香-匹配
  • Riyadhh-匹配
  • 实际上,我需要Lucene中的一个例子,其中条件“2”应该匹配,“4”不应该匹配

    我尝试了所有查询,但第二个场景不匹配

    有些人建议使用标记器和自定义分析器

    由于我是Lucene的新手,我处理过查询,但不知道如何将标记器和自定义分析器集成到我们的查询中。

    如果您只需要前缀匹配,可以使用带有小写字母过滤器和EdgeNgramFilter的关键字标记器:

    <analyzer>
      <tokenizer class="solr.KeywordTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="50"/>
    </analyzer>
    
    
    
    此链将传入文本保留为单个标记(关键字标记器),然后将传入文本转换为小写(LowerCaseFilter),然后根据字符串长度将其拆分为多个标记

    如果要匹配字符串中的任何位置,可以使用普通的ngramfilter:

    <filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="4"/>
    
    
    
    。。但是请注意,如果最小值和最大值之间的差异很大,索引的大小将快速增长


    还有第二个选项,那就是使用ReversedWildcardFilter,它专门针对
    *foo*
    查询条件进行了调优,因此如果您不需要对每个标记进行进一步处理(例如对每个单独的标记进行词干分析等)这可能是一种选择。

    在帖子中添加搜索中涉及的字段的analyzer链、您尝试过的查询中使用的所有参数以及您正在使用的Solr版本会有很大帮助。