我正在尝试使用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>
答案 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>
可用于配置返回结果的准确性。