SOLR 使用 CONCAT 函数查询从字段中丢失了一些单词 - 如何使其处理所有单词?
Posted
技术标签:
【中文标题】SOLR 使用 CONCAT 函数查询从字段中丢失了一些单词 - 如何使其处理所有单词?【英文标题】:SOLR loses some of the words from the fields with CONCAT function query - how to make it process all words? 【发布时间】:2020-02-09 13:45:00 【问题描述】:我有一个 SOLR 文档:
"id": "Test1",
"MyInt": 100500,
"FirstString": ["Test First String"],
"SecondString": ["Test Second String"]
这个核心的托管模式是:
...
<field name="MyInt" type="plong" />
<field name="FirstString" type="text_general" />
<field name="SecondString" type="text_general" />
...
键入“text_general” - 这是为了正确搜索。
我需要在 /select 中获得两个文本字段的连接。 我创建了这样一个请求:
http://localhost:8983/solr/testcore/select?q=*:*&fl=Result:concat(FirstString,';',SecondString)
期望在结果中看到类似以下内容的强文本:
Result:"Test First String;Test Second String"
但实际上SOLR去掉了部分词,每个字段只留下1个词。也许最重要的是要寻找:
Result:"First;Second"
不要让我在 /select 中将 wt=json 更改为 wt=csv,我知道这个功能,但在这种情况下它不适合。
请告知 SALS 出现这种奇怪行为的原因是什么?
也许这是因为数据存储在 type="text_general" 字段中,multiValued=true?我用 type="string" 字段做了一个实验——问题重复了。
我不明白如何让 SOLR 从 concat 函数查询中的 text_general 字段中获取所有单词?
【问题讨论】:
【参考方案1】:您关于这是因为使用text_general
字段类型的假设是正确的;当您使用concat
时,只会从该字段返回第一个令牌。但是,您是说在使用 string
字段时它也不起作用 - 这是错误的。当使用 string
字段类型时(即不进行任何处理并且文本被逐字存储为单个标记),行为就像您请求的那样:
"responseHeader":
"zkConnected":true,
"status":0,
"QTime":4,
"params":
"q":"*:*",
"fl":"FirstField_string, LastField_string, Result:concat(FirstField_string,';',LastField_string)",
"_":"1581267948122",
"response":"numFound":1,"start":0,"docs":[
"FirstField_string":"Test First String",
"LastField_string":"Test Second String",
"Result":"Test First String;Test Second String"]
字段名称更改只是因为我尝试了您的原始字段名称。这要求该字段为multiValued="false"
。
【讨论】:
谢谢,现在我明白问题所在以及如何解决了!以上是关于SOLR 使用 CONCAT 函数查询从字段中丢失了一些单词 - 如何使其处理所有单词?的主要内容,如果未能解决你的问题,请参考以下文章