2

这是我第一次在 solr 中使用同义词,并且一直在阅读它以尝试了解如何使用它。尽管有很多关于同义词工厂及其工作原理的文档,但我找不到太多关于如何开始的信息。所以,我通过修改 synonyms.txt 文件开始使用它,并添加了一行

mba => master business administration

并将字段 'degree' 定义为 text_en_splitting_tight ,默认情况下使用同义词过滤器工厂。

当我在 'degree' 中搜索单词 mba 时,我希望它能够将输入转换为工商管理硕士,然后将其与我的索引中的条目进行匹配,这不会发生。但是,当我在查询段中的 solr 分析器页面上尝试它时,它似乎对“度”和“text_en_splitting_tight”都进行了正确的转换。

  1. 如果是我的 php 应用程序,我该怎么做才能检查输入是否被转换?
  2. 如何有效地将用户输入的同义词转换为一个标准词并针对我的索引中的条目进行搜索?
  3. 有什么方法可以在查询输入通过分析器(解析的输入)后访问它?我使用 Solarium 作为 php 客户端。

请不要介意这个问题是否太业余,但我真的发现很难找到解决办法。如果我错过了一些重要的步骤,请随时批评。

编辑:在下面添加 schema.xml 的一部分

<field name="candDegree" type="text_en_splitting_tight" indexed="true" stored="true" multiValued="true"/>
<field name="candStream" type="text_en_splitting_tight" indexed="true" stored="true" multiValued="true"/>

编辑 2:字段类型分析器如下所示:

<fieldType name="text_en_splitting_tight" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
      <analyzer>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>

        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="true"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
        <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
             possible with WordDelimiterFilter in conjuncton with stemming. -->
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      </analyzer>
      </fieldType>

synonyms.txt 是这样的:

mba => master business administration
mcom => master commerce
me,mtech,ms => master engineering
mit,mca => master information technology
ma => master humanities


bba,bbm => bachelor business administration
bcom => bachelor commerce
be,btech => bachelor engineering
bca,bit => bachelor information technology
ba => bachelor humanities
4

0 回答 0