如何搜索短语

时间:2013-02-07 13:38:09

标签: solr solrnet

我做了一个工作来获取包含“好”或“微波”或“好微波”的所有文件,如果我将“好微波”作为q参数请指导我,我正朝着正确的方向前进

我在我的架构中定义了两个字段类型(text_general和shingleString),如下所示

<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" enablePositionIncrements="true" />        
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />        
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

<fieldType name="shingleString" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PositionFilterFactory" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.ShingleFilterFactory" outputUnigrams="true" outputUnigramIfNoNgram="true" maxShingleSize="99"/>
    <filter class="solr.PositionFilterFactory" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

然后在索引时我将所有这些字段添加到两个不同的副本字段,如下所示。

<field name="SearchableField" type="shingleString" indexed="true" stored="false" multiValued="true"/>
    <copyField source="ProductName" dest="SearchableField"/>
     <copyField source="ProductDesription" dest="SearchableField"/>
    <copyField source="Product Feedback" dest="SearchableField"/>

<field name="SearchableField1" type="text_general" indexed="true" stored="false" multiValued="true"/>
    <copyField source="ProductName" dest="SearchableField1"/>
     <copyField source="ProductDesription" dest="SearchableField1"/>
    <copyField source="Product Feedback" dest="SearchableField1"/>

现在,如果我在字段SearchableField和SearchableField1上查询,我将获得包含“Good”或“Microwave”或“Good Microwave”的所有文档。 下面是我用来获取所有文档的查询。 Q = SearchableField%3AGood +微波%0ASearchableField1%3AGood +微波

但是包含整个短语“Good Microwave”的文件得分非常低。 任何人都可以指导我在那些包含整个短语的文件上得到更高的分数,如果我的方法是正确的吗?

或者任何人都可以指导我实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

你好frnd你可以使用简单查询使用'suggester component'请求处理程序和字段类型shingleString来搜索phrase.just你必须专注于你的查询语法......

 http://localhost:8983/solr/suggest?wt=xml&indent=true&spellcheck=true&spellcheck.q=usrsearchphrase


 <fieldType name="shingleString" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PositionFilterFactory" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.ShingleFilterFactory" outputUnigrams="true" outputUnigramIfNoNgram="true" maxShingleSize="99"/>
    <filter class="solr.PositionFilterFactory" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

答案 1 :(得分:0)

如果您有'text_general'类型的字段, 寻找:q =良好的微波炉 将找到任何带有“好”或“微波”的文件。 正在寻找:q =“好微波炉” 将找到包含彼此相邻的两个术语的任何文档。 q =“良好的微波炉”^ 5好的微波炉将找到包含任一术语的任何文件,但会增加包含彼此相邻术语的文件。