Performance Solr过滤查询中的模糊问题
如果有人能帮我解决问题,我将不胜感激。我有一个疑问:Performance Solr过滤查询中的模糊问题,performance,solr,Performance,Solr,如果有人能帮我解决问题,我将不胜感激。我有一个疑问: select?q=city:Frankfurt am Main~&fq=street:Gerhart-Hauptmann-Str.~ 这对我不起作用。我想使用模糊搜索来捕捉一些用户输入错误 以下是我想要的: Frankfurt am Main应在city字段中使用模糊搜索进行完全搜索 Gerhart-Hauptmann-Str.应通过模糊搜索转换为三个术语 调试我实际得到的结果: "debug": { "rawquery
select?q=city:Frankfurt am Main~&fq=street:Gerhart-Hauptmann-Str.~
这对我不起作用。我想使用模糊搜索来捕捉一些用户输入错误
以下是我想要的:
应在Frankfurt am Main
字段中使用模糊搜索进行完全搜索city
应通过模糊搜索转换为三个术语Gerhart-Hauptmann-Str.
"debug": {
"rawquerystring": "city:Frankfurt am Main~",
"querystring": "city:Frankfurt am Main~",
"parsedquery": city:frankfurt text:am text:Main~2",
"parsedquery_toString": "city:frankfurt text:am text:Main~2",
"explain": {...},
"QParser": "LuceneQParser",
"filter_queries": [
"street:Gerhart-Hauptmann-Str.~"
],
"parsed_filter_queries": [
"street:gerhart-hauptmann-str.~2"
],
我(想)我想要这个输出:
"debug": {
"rawquerystring": "city:Frankfurt am Main~",
"querystring": "city:Frankfurt am Main~",
"parsedquery": city:frankfurt~2 city:am~2 text:Main~2",
"parsedquery_toString": "city:frankfurt~2 city:am~2 text:Main~2",
"explain": {...},
"QParser": "LuceneQParser",
"filter_queries": [
"street:Gerhart-Hauptmann-Str.~"
],
"parsed_filter_queries": [
# My analyser converts Str. to strasse
"street:gerhart~2 street:hauptmann~2 strasse~2"
],
schema.xml
<field name="city" type="admin_name" indexed="true" stored="true" />
<field name="street" type="street_name" indexed="true" stored="true" multiValued="false"/>
<fieldType name="admin_name" class="solr.TextField" >
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.SynonymFilterFactory" synonyms="lang/synonyms_de_admin.txt"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="street_name" class="solr.TextField" >
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<!-- The StartEndSynonymFilter replaces synonyms which
are at the start or the end of an term. The types
START_SYNONYM or END_SYNONYM will be set. -->
<filter class="my.StartEndSynonymFilterFactory" synonyms="lang/synonyms_de_street.txt"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
</fieldType>
这有可能吗
如果您需要更多信息来回答,请在评论中留下提示
(法兰克福美茵河畔)~
这是否能达到预期效果
然而,对于名称(城市或街道),我不确定您是否应该标记它们。也许将它们存储为一个不区分大小写的标记,并应用模糊搜索,如“Frankfurt am Main”~(在查询中使用引号),这才是您真正需要的
然而,你应该试着让它以你描述的方式工作。然后查看查询结果。并且(可能同时)设置一个索引,将城市和街道名称存储为单个标记(例如,小写和ascii折叠的关键字标记器),并将模糊搜索作为单个术语应用于它们。我想结果会更清晰。但最好的方法是尝试并比较
此外,我建议在输入端试用(扩展或非扩展)Demax处理程序,而不必区分城市和街道:
使用dismax处理程序处理输入,您可以允许用户非常自由地输入搜索词(比如有一个搜索字段,其中城市和街道可以随机顺序和格式输入)。从schema.xml中查看“city”和“street”的字段设置会很有帮助。如果术语未在连字符上标记,则您的设置中可能缺少analyzer/tokenizer。对于q参数-您是否尝试过在“Frankfurt am Main”周围使用括号?@Risadinha I添加了字段定义。对于q参数-如果我添加括号,我会得到一个错误:{“msg”:“org.apache.solr.search.SyntaxError:无法解析'admin5:(Frankfurt am Main)~':遇到\“\”~“\”…,“代码”:400我认为Demax处理程序对我不起作用。我必须建议匹配的质量,我通过在我的客户机(使用Solrj)中按字段计算输入和输出之间的Levenshtein距离来做到这一点。我将尝试您的其他建议并给出反馈。感谢您的回答:-)