单个匹配的Solr searchField架构

单个匹配的Solr searchField架构,solr,xsd,search-engine,Solr,Xsd,Search Engine,我想编写一个特定的fieldType,它将如下面的示例所示工作: 假设我们有一个名字:foomobar(f00B2r) “f”=>foo MooBar(f00B2r)(以及其他带有“f”的字符) “foo moob”=>foo MooBar(f00B2r)(以及其他带有“foo moob”的字符,等等) “foo(f0)=>foo MooBar(f00B2r) “moobar f”=>foo moobar(f00B2r) “(f00b2r)”=>foo MooBar(f00b2r) “条”=>

我想编写一个特定的fieldType,它将如下面的示例所示工作:
假设我们有一个名字:
foomobar(f00B2r)

  • “f”=>
    foo MooBar(f00B2r)
    (以及其他带有“f”的字符)
  • “foo moob”=>
    foo MooBar(f00B2r)
    (以及其他带有“foo moob”的字符,等等)
  • “foo(f0)=>
    foo MooBar(f00B2r)
  • “moobar f”=>
    foo moobar(f00B2r)
  • “(f00b2r)”=>
    foo MooBar(f00b2r)
  • “条”=>无
  • “moobar o”=>无
  • “moob foo”=>无
我的问题:

  • 如果我搜索“moobar f”,我将一无所获;
  • 如果我搜索“(f00b2r)”我将一无所获;
  • solr/conf/schema.xml中的我的字段类型:

    <fieldType name="frontMatch" class="solr.TextField" positionIncrementGap="255">
      <analyzer type="index">
        <tokenizer class="solr.LowerCaseTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="255" side="front" />
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="255" side="front" />
      </analyzer>
    </fieldType>
    
    
    
    附加说明
    对不起我的英语,谢谢;

    我的解决方案:
    scheme.xml的一部分

    <fieldType name="frontMatch" class="solr.TextField" positionIncrementGap="0" >
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="255" side="front" />
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="255" side="front" />
      </analyzer>
    </fieldType>
    

    搜索时,数字1000000等于运算符“和”。

    因此,搜索查询看起来像:
    name:“moobar f”~1000000

    其中
    name
    是我们正在搜索的字段;

    我不知道第一个问题,但就第二个问题而言,您是否尝试过转义括号?例如,查询
    \(foob2r\)
    ,而不是
    (foob2r)