用“和”查询solr 4.7

时间:2014-04-08 17:37:29

标签: solr lucene

我正在尝试使用solr(4.7.1)选择查询,但我找不到任何有用的示例。我真的不明白solr查询背后的逻辑。 -text:,+ text:,!( - text:??)。

我想对字段“first_name”和“last_name”进行选择

http://127.0.0.1:8080/solr-4.7.1/persons/select?q=first_name:%22JOSHUA%22%20and%20+last_name:%22MCKAY%22&rows=10&sort=no_persons+asc

在SQL中:

select * from persons where first_name like '%JOSHUA%' and last_name like '%MCKAY%' order by no_persons asc

但结果与查询无关。它更像是first_name :?或者last_name:?。

另外,我使用levenshtein距离算法?我知道它就像“~30”。

使用solr配置数据库同步的问题少于使用简单查询...

schema.xml:

<fields>
   [....]
   <field name="first_name" type="text_name" indexed="true" stored="true" multiValued="true"/>
   <field name="last_name" type="text_name" indexed="true" stored="true" multiValued="true"/>
   <field name="full_name" type="text_name" indexed="true" stored="true" multiValued="true"/>
   <copyField source="first_name" dest="full_name"/>
   <copyField source="last_name" dest="full_name"/>
   [....]
</fields>

<types>
   [....]
   <fieldType name="text_name" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="false"/>
    <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true" maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
  </analyzer>
  <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="false"/>
  </analyzer>
</fieldType>
   [....]
</types>

1 个答案:

答案 0 :(得分:0)

试试这个:

q=first_name%3A"JOSHUA"+AND+last_name%3A"MCKAY"

关于levenshtein距离算法,类似的功能是使用SpellCheckComponent完成的,Lucene SpellChecker默认在内部使用{{3}},实现了Levenshtein。

此外,如果您看到SpellCheckComponent的配置参数<str name="accuracy">0.7</str>可用于配置返回结果的准确性。