Если возможно, я хотел бы ограничить мои изменения кода только schema.xml
и другими конфигурационными файлами. У меня есть следующий код в моем schema.xml
:Solr: нечеткий оператор не меняет результаты поиска
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="title" type="text_general" indexed="true" stored="true"/>
<field name="fact" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="body" type="text_exact_fuzzy" indexed="true" stored="true"/>
<copyField source="title" dest="text"/>
<copyField source="body" dest="text"/>
Я определил text_exact_fuzzy позже в моем schema.xml
следующим образом:
<text_exact_fuzzy: field type for fuzzy matching -->
<fieldType name="text_exact_fuzzy" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<!--
<filter class="solr.PorterStemFilterFactory"/>
-->
<filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="true"/>
</analyzer>
</fieldType>
Когда я сделать запрос в представлении Django, я использую следующий код (который принимает запрос и добавляет тильда обозначения (например, ~ 0,8) до конца каждого слова в запросе):
fuzzy_clean_text = re.sub(r'\s', '~' + str(fuzzy_index) + ' ', clean_text + ' ')
#return fuzzy_clean_text
post_params = [('q', re.escape(json.dumps(fuzzy_clean_text))),
('wt','json'),
('fl', 'fact'),
# I've tried the query with and without the following parameter:
#('spellcheck.collate', 'true'),
]
result = urllib2.urlopen(solr_server_url, urllib.urlencode(post_params))
response = json.loads(result.read())
Однако, независимо от того, как я установил fuzzy_index
, запрос возвращает те же результаты. Кроме того, нечеткий поиск очень снисходителен, иногда соответствующий нерелевантный текст на конкретный fact
. Есть ли другой подход, будь то через параметры запроса или изменения в файле schema.xml
, который исправит проблему? Другие сообщения stackoverflow предлагают ComplexPhraseQueryParser
, но я не хочу добавлять Java в свою кодовую базу (и это все равно сложно понять).
Можете ли вы отправить пример? –