Solr查询在搜索多个单词(用空格分隔)字符串时给出错误结果

Solr查询在搜索多个单词(用空格分隔)字符串时给出错误结果,solr,Solr,我已在Solr中为以下文档编制了索引,其中app_name是多词字符串,例如“消防检查” 如果我执行以下Solr查询,Solr返回错误的响应 查询: http://localhost:8983/solr/AxoSolrCollectionLocal/select?fq=app_name:*fire P*&q=*:* 我正在搜索其应用程序名称包含“fire p”的记录,但得到的是其应用程序名称包含“fire inspection”的响应。这里,字符串“Fire P”与下面的记录不匹配,但

我已在Solr中为以下文档编制了索引,其中app_name是多词字符串,例如“消防检查”

如果我执行以下Solr查询,Solr返回错误的响应

查询:

http://localhost:8983/solr/AxoSolrCollectionLocal/select?fq=app_name:*fire P*&q=*:*
我正在搜索其应用程序名称包含“fire p”的记录,但得到的是其应用程序名称包含“fire inspection”的响应。这里,字符串“Fire P”与下面的记录不匹配,但仍然由Solr响应

Response:
{
    "app_name":"Fire inspection",
    "appversion":1,
    "id":"app_1397_version_2417",
    "icon":"/images/media/default_icons/app.png",
    "type":"app",
    "app_id":1397,
    "account_id":556,
    "app_description":"fire inspection app",
    "_version_":1599441252925833216}]
}
有人能帮我处理Solr查询(与SQL中的like查询相同),它将检查子字符串和空格是否重要


非常感谢您的帮助。

首先-您的查询并不是您认为的意思<代码>应用程序名称:*fire P*表示“在
app\u name
字段中搜索以
fire
结尾的任何内容和/或在默认搜索字段中搜索以
P
开头的任何内容”。由于没有在第二个值前面加上字段名,因此将使用默认的搜索字段

如果您想在这样的字段中搜索子字符串匹配(即,包含“fire p”的内容)作为值内的子字符串,字段类型必须设置为字符串字段或带有关键字标记器的字段,这样字段才能保留其实际值,并且不会进一步处理/过滤/标记。如果正在标记,则这些标记(即
激发
检查
等)将单独存储。您必须正确地跳出所有空格并查询单个字段(即app_name:fire\P`),并且根据使用情况,除非同时启用ReversedWildcardFilter,否则性能可能会受到影响

但是,您也可以使用来获得对短语查询中wilcards的支持:

{!complexphrase inOrder=true}app_name:"*fire P*"

只要您的令牌中实际有大写字母,就应该可以工作(通配符禁用许多筛选器,因此通常您会希望匹配令牌中的结束语法。

谢谢!我已将字段类型从text_general更改为string,并且可以工作。。但是,要搜索包含值“fire p”的所有记录我必须编写以下查询:
http://localhost:8983/solr/AxoSolrCollectionLocal/select?fq=app_name:fire\P*&q=*:*
如果没有其他查询,您可以直接在
q
中使用该查询-行为大致相同。
{!complexphrase inOrder=true}app_name:"*fire P*"