2010-03-10 113 views
7

除了一些小的配置和模式更改外,我已经获得了SOLR 1.4的大量安装。使用Solr 1.4进行通配符搜索和突出显示

<requestHandler name="standard" class="solr.SearchHandler" default="true"> 
    <!-- default values for query parameters --> 
    <lst name="defaults"> 
     <str name="defType">dismax</str> 
     <str name="echoParams">explicit</str> 
     <str name="qf"> 
      text 
     </str> 
     <str name="spellcheck.dictionary">default</str> 
     <str name="spellcheck.onlyMorePopular">false</str> 
     <str name="spellcheck.extendedResults">false</str> 
     <str name="spellcheck.count">1</str> 
    </lst> 
</requestHandler> 

我使用索引的主要字段类型是这样的:

<fieldType name="textNoHTML" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
      <charFilter class="solr.HTMLStripCharFilterFactory" /> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.StopFilterFactory" 
        ignoreCase="true" 
        words="stopwords.txt" 
        enablePositionIncrements="true" 
      /> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
      <filter class="solr.StopFilterFactory" 
        ignoreCase="true" 
        words="stopwords.txt" 
        enablePositionIncrements="true" 
      /> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
     </analyzer> 
    </fieldType> 

现在,当我执行使用

"q=search+term&hl=on" 

我得到突出显示搜索,和漂亮的准确分数。

但是,对于通配符,我假设你需要使用“q.alt”?真的吗?如果是这样我的查询看起来是这样的:

"q.alt=search*&hl=on" 

当我使用上面的查询,高亮不工作,所有的分数都是“1.0”。

我在做什么错?是我想要的,而不绕过一些非常酷的SOLR优化。

干杯!

+1

我发现的一些信息:http://old.nabble.com/Wildcard-on-q.alt-with-Dismax-td17722791.html http://www.mail-archive.com/solr-user @ lucene.apache.org/msg21518.html但是它似乎是固定的1.4。我会继续找... – 2010-03-10 22:18:49

+0

酷,欢呼Mauricio。我发现了很多关于这个主题的信息,但是讨论永远不会解决我需要使用哪些参数,或者如果我仍然可以使用突出显示,得分,拼写检查等等。欢呼声尽管 – andy 2010-03-10 23:44:28

回答

8

从我所知道的你不能在dismax处理程序中使用通配符,请参阅http://wiki.apache.org/solr/DisMaxRequestHandler#q

要模拟通配符搜索,我使用了EdgeNGrams,按照这里的一些指令:http://www.lucidimagination.com/blog/2009/09/08/auto-suggest-from-popular-queries-using-edgengrams/。实际上,我真的只是将edgytext字段类型添加到schema.xml中,并更改了我想要搜索的字段的字段类型。

希望这会有所帮助!

+0

哇,欢呼声,最后!! – andy 2010-05-18 07:35:14

+0

很高兴能帮到你!我很沮丧自己:) – jimmystormig 2010-05-19 12:55:56

5

或者您可以抓住最新的每晚构建并使用edismax(ExtendedDismaxQParser)。

它处理尾随和领先的通配符。

+0

很酷,谢谢Jem,我会检查一下。顺便说一句,你是在Solr邮件列表论坛上的东西吗?如果Solr能够成为SO他们是官方问答地点,这将是一件好事......这些邮件列表真的很不直观 – andy 2010-05-23 23:31:43