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 函数查询从字段中丢失了一些单词 - 如何使其处理所有单词?的主要内容,如果未能解决你的问题,请参考以下文章

检索Solr查询中的特定字段?

检索 Solr 查询中的特定字段?

mysql—group_concat函数

oracle的sql查询结果拼接

solr 可以返回函数值(不是 solr 分数或文档字段)吗?

mysql GROUP_CONCAT 查询某个字段(查询结果默认逗号拼接)