日光浴查询查询与字段

时间:2016-04-12 08:49:01

标签: solr solarium

我是Solr 6.0&的新手。日光浴室整合。我已经设置了运行但是字段没有返回结果 不完全匹配查询。例如,我有一个网址字段包含'http://ayodeji.com''http://ayo-tuntun.com',但查询了' ayo'不会返回这些行,尽管它们在Solr管理部分中返回了*:*个查询。我已在托管模式文件中将字符串更改为文本但仍无法正常工作。 请帮忙 以下是我正在使用的Solarium dismax示例中的代码。谢谢。

    $client = new Solarium\Client($config);

$query = $client->createSelect();

$dismax = $query->getDisMax();

$dismax->setQueryFields('url^5 author^3 body^1 title');

$searchTerm = 'ayo';

$query->setQuery($searchTerm);

$resultset = $client->select($query);

echo 'NumFound: '.$resultset->getNumFound();

foreach ($resultset as $document) {

    echo '<hr/><table>';

    // the documents are also iterable, to get all fields
    foreach ($document as $field => $value) {
        // this converts multivalue fields to a comma-separated string
        if (is_array($value)) {
            $value = implode(', ', $value);
        }
        echo '<tr><th>' . $field . '</th><td>' . $value . '</td></tr>';
    }
    echo '</table>';
}

2 个答案:

答案 0 :(得分:1)

您需要使用WordDelimiterFilter按小部分拆分网址。

https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters

 <filter class="solr.WordDelimiterFilterFactory"
            generateWordParts="1" catenateWords="1" types="wdfftypes.txt"
            generateNumberParts="1" catenateNumbers="1" splitOnNumerics="1"
            catenateAll="1" splitOnCaseChange="1" 
            stemEnglishPossessive="0" preserveOriginal="0" />
    </analyzer>

我附上了测试结果的图片。

enter image description here

在分析工具的左侧,您可以看到已匹配ayo关键字。

我的text_general fieldType

示例
 <fieldType name="text_general" class="solr.TextField" omitNorms="false"  positionIncrementGap="100" multiValued="true">
    <analyzer type="index">
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
     <filter class="solr.LowerCaseFilterFactory"/>
     <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
     <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
     <filter class="solr.WordDelimiterFilterFactory"
            generateWordParts="1" catenateWords="1" types="wdfftypes.txt"
            generateNumberParts="1" catenateNumbers="1" splitOnNumerics="1"
            catenateAll="1" splitOnCaseChange="1" 
            stemEnglishPossessive="0" preserveOriginal="0" />
    </analyzer>
    <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.WordDelimiterFilterFactory"
            generateWordParts="1" catenateWords="1" types="wdfftypes.txt"
            generateNumberParts="1" catenateNumbers="1" splitOnNumerics="1"
            catenateAll="1" splitOnCaseChange="1"
            stemEnglishPossessive="0" preserveOriginal="0" />
    </analyzer>
  </fieldType>

答案 1 :(得分:0)

Solr不搜索子串。即:搜索“ello”找不到包含“helloworld”的文档是正常行为。如果您愿意,可以使用*ello*作为搜索字符串。