Solr стоп-слово вопрос - документы не совпадают - PullRequest
4 голосов
/ 13 января 2012

Я использую solr-3.4, моя часть схемы выглядит так:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.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.KeywordMarkerFilterFactory" protected="protwords.txt"/>
        <filter class="solr.PorterStemFilterFactory"/>
    </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_en.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.KeywordMarkerFilterFactory" protected="protwords.txt"/>
        <filter class="solr.PorterStemFilterFactory"/>
    </analyzer>
</fieldType>

stopwords_en.txt содержит
a
и
, а
равны
как

и т. Д.

Теперь, когда я ищу " купить дом ", Solr не возвращает мне документы с текстом " купить дом ".
Также, когда я ищу " купить дом ", Solr не возвращает мне документы с текстом " покупка дома ".

Часть debugQueryis

<str name="rawquerystring">cContent:"buy a house"</str>
<str name="querystring">cContent:"buy a house"</str>
<str name="parsedquery">PhraseQuery(cContent:"bui ? hous")</str>
<str name="parsedquery_toString">cContent:"bui ? hous"</str>

Подобный (но не точный) вопрос был найден здесь
Но не было удовлетворительного ответа для решения этой проблемы.

Есть идеи, как решить эту проблему?или что не так?

Ответы [ 2 ]

3 голосов
/ 13 января 2012

Вы выполняете поиск с помощью PhraseQuery, поэтому в первом случае слово "купить дом" не будет совпадать с словом "купить дом".Если вы добавите slop (cContent: "buy house" ~ 2) в PhraseQuery, вы также получите совпадения.

Во втором случае, хотя стоп-слово отфильтровано, оно все еще ожидает, что что-то будет в этой позиции, поэтому«купить дом» будет соответствовать «купить один дом», а не «купить дом».Может быть, помои тоже могут это исправить, но я не уверен.

0 голосов
/ 11 января 2014

На самом деле я думаю, что ваша проблема с PorterStemmer - "дом" превращается в "дом". Если вы действительно не думаете, что вам это нужно, я бы отключил портер стеммер. По моему опыту, это обычно приносит больше вреда, чем пользы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...