2013-06-24 6 views
0

Моего опыта противоположности http://lucene.472066.n3.nabble.com/string-field-does-not-yield-exact-match-result-using-qf-parameter-td4060096.htmlSolr: строка поле не дает частичный результат матча с помощью параметра QF

Когда я добавить «QF», чтобы в dismax запроса я не получить никакого результата, если нет полного соответствия.

Я использую NGramFilterFactory следующим образом:

<fieldType name="text_edgengrams" class="solr.TextField"> 
    <analyzer type="index"> 
    <tokenizer class="solr.LowerCaseTokenizerFactory"/> 
    <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.LowerCaseTokenizerFactory"/> 
    </analyzer> 
</fieldType> 

... 


<field name="text_ngrams" type="text_edgengrams" indexed="true" stored="false" multiValued="true" /> 

... 

<field name="domain" type="string" indexed="true" stored="true"/> 

... 

<copyField source="domain" dest="text_ngrams"/> 

Если я yengas.com в индексированный я могу найти yengas.com но не yengas. Однако, если я уроню 'qf', я могу искать yengas.

Пример ищет:

$ curl "http://localhost:8282/solr/links/select?q=domain:yengas&wt=json&indent=on&fl=id,domain,score" 
=> "response":{"numFound":0,"start":0,"docs":[] 


$ curl "http://localhost:8282/solr/links/select?q=domain:yengas.com&wt=json&indent=on&fl=id,domain,score" 
=> "response":{"numFound":3,"start":0,"docs":[] 

$ curl "http://localhost:8282/solr/links/select?defType=dismax&q=yengas&qf=domain^4&pf=domain&ps=0&fl=id,domain,score" 
=> "response":{"numFound":0,"start":0,"docs":[] 


$ curl "http://localhost:8282/solr/links/select?defType=dismax&q=yengas.com&pf=domain&ps=0&fl=id,domain,score" 
=> "response":{"numFound":3,"start":0,"docs":[] 

Частичное совпадение не найдено на dismax и нормального запроса.

Что я могу пропустить?

+0

Похоже, что частичное совпадение не работает с исходным полем, но с копией в поле. Это работает '$ curl 'http: // localhost: 8282/solr/links/select? Q = text_ngrams: yengas & wt = json & indent = on & fl = id, domain, score" –

ответ

0

CopyField не изменяет исходное поле.
Кроме того, Copyfield не применяет исходный анализ в поле Копировать.

Документация @http://wiki.apache.org/solr/SchemaXml#Copy_Fields

копия делается на уровне исходного потока и копия не подает в другую копию.

Наличие копии в качестве источника тега copyfield не работает.
Источник копируемого поля должен быть фактическим полем, которое имеет некоторое значение и не делает каскада.

Таким образом, исходное и скопированное поле будут вести себя согласно определению, которое в вашем случае является String и ngrams.