gpt4 book ai didi

solr - 刻面字段中带有特殊字符的刻面结果错误

转载 作者:行者123 更新时间:2023-12-04 15:54:22 27 4
gpt4 key购买 nike

我已经为电子商务商店实现了 Solr 搜索和分面,并且面临着分面过滤分面结果的奇怪问题。只有当我们在 facet 字段中有特殊字符(即括号)时才会发生这种情况,否则一切正常。

我已经使用 SolrNet 实现了这一点。我直接检查了对 Solr 的原始查询,发现这个问题可能出在 Solr 本身,与 SolrNet 无关。

例子:

我有许多产品和过滤器,如下所示:

RAM (GB)
2 GB
4 GB
8 GB

Memory (GB)
4 GB
8 GB
16 GB

每个 facet 选项都有一些产品,所以问题不在于 facet.min 计数。而且我也正确应用了标记。

现在,这个方面中的一个工作正常,而另一个方面似乎不适用于方面字段中的括号。

这是我定义构面字段的模式。
<dynamicField name="f_*"  type="string" indexed="true" stored="true" multiValued="true" required="false"  />
<dynamicField name="pa_*" type="string" indexed="true" stored="true" multiValued="true" required="false" />

当我查询以 pa_ 开头的字段时,Facet 工作正常,但不能以 f_ 开头。

我正在做的查询,进入 Solr:
../select?indent=on&wt=json&facet.field={!ex%3Dpa_RAM(GB)}pa_RAM(GB)&fq={!tag%3Dpa_RAM\(GB\)}pa_RAM\(GB\):2%2BGB&q=CategoryID:(1+OR+2+OR+3+OR+4)&start=0&rows=10&defType=edismax&facet.mincount=1&facet=true&spellcheck.collate=true

图片1
enter image description here

这按预期工作正常。

另一个查询:
../select?indent=on&wt=json&facet.field={!ex%3Df_Memory(GB)}f_Memory(GB)&fq={!tag%3Df_Memory\(GB\)}f_Memory\(GB\):4%2BGB&q=CategoryID:(1+OR+2+OR+3+OR+4)&start=0&rows=10&defType=edismax&facet.mincount=1&facet=true&spellcheck.collate=true

给出以下结果:

图片 2 enter image description here

这不起作用。但是,如果我从查询和索引数据中删除特殊字符,这可以正常工作。

此外,返回的 facet 选项是我添加了过滤器标签的选定选项。 Solr 不返回所有其他方面选项。

我无法弄清楚为什么会发生这种情况以及如何解决它。

任何线索\想法都会很棒!

请引用此查询和图片。(这不是正确的方法或完美的解决方案)
../select?indent=on&wt=json&facet.field={!ex%3Df_Memory(GB)}f_Memory(GB)&fq={!tag%3Df_Memory(GB)}f_Memory\(GB\):4%2BGB&q=CategoryID:(1+OR+2+OR+3+OR+4)&start=0&rows=10&defType=edismax&facet.mincount=1&facet=true&spellcheck.collate=true&fl=Id,Name,f_Memory(GB)

enter image description here

引用链接: Local Parameters for Faceting

请帮我!

最佳答案

  • SOLR 查询中的特殊字符(qfq 参数)如果您需要按字面意思搜索它们,则必须对其进行转义,否则 queryParser 会采用它们的特殊含义。 (参见 SOLR Documentation 中的“转义特殊字符”

    在示例中 +字符未在 fq 中转义:
    {!tag=f_Memory\(GB\)}f_Memory\(GB\):4+GB
  • 这些转义规则不适用于 Local parameters ,即一切都在 {! 之间和 } .

    在您转义的示例中 ()在标签标签中。这样标签定义为{!tag=f_Memory\(GB\)} in filter 与 {!ex=f_Memory+(GB)} 中引用的不同在 facet 字段中,因此在分面期间不排除过滤器,并且仅使用匹配的文档来构建分面。

  • 您应该将过滤器编写为:
    {!tag=f_Memory(GB)}f_Memory\(GB\):4\+GB

    和方面作为
    {!ex=f_Memory+(GB)}f_Memory+(GB)

    以获得您要找的东西。

    完整正确的请求示例:
    ../select?indent=on&wt=json&facet.field={!ex%3Df_Memory(GB)}f_Memory(GB)&fq={!tag%3Df_Memory(GB)}f_Memory\(GB\):4\%2BGB&q=CategoryID:(1+OR+2+OR+3+OR+4)&start=0&rows=10&defType=edismax&facet.mincount=1&facet=true&spellcheck.collate=true

    我在本地测试的简单真实示例:

    这是核心数据:

    要求:
     http://localhost:8983/solr/test/select?q=*%3A*&fl=id%2Cf_*%2Cpa_*&wt=json&indent=true

    回复:
    {
    "responseHeader": {
    "status": 0,
    "QTime": 1,
    "params": {
    "q": "*:*",
    "indent": "true",
    "fl": "id,f_*,pa_*",
    "wt": "json",
    "_": "1474529614808"
    }
    },
    "response": {
    "numFound": 2,
    "start": 0,
    "docs": [
    {
    "id": "1",
    "f_Memory(GB)": [
    "4+GB"
    ],
    "pa_RAM(GB)": [
    "2+GB",
    "4GB",
    "8GB"
    ]
    },
    {
    "id": "2",
    "f_Memory(GB)": [
    "8+GB"
    ],
    "pa_RAM(GB)": [
    "4GB"
    ]
    }
    ]
    }
    }

    工作面:

    要求:
    http://localhost:8983/solr/test/select?q=*%3A*&fq=%7B!tag%3Df_Memory(GB)%7Df_Memory%5C(GB%5C)%3A4%5C%2BGB&fl=id%2Cf_*%2Cpa_*&wt=json&indent=true&facet=true&facet.field=%7B!ex%3Df_Memory(GB)%7Df_Memory(GB)

    回复:
    {
    "responseHeader": {
    "status": 0,
    "QTime": 2,
    "params": {
    "q": "*:*",
    "facet.field": "{!ex=f_Memory(GB)}f_Memory(GB)",
    "indent": "true",
    "fl": "id,f_*,pa_*",
    "fq": "{!tag=f_Memory(GB)}f_Memory\\(GB\\):4\\+GB",
    "wt": "json",
    "facet": "true",
    "_": "1474530054207"
    }
    },
    "response": {
    "numFound": 1,
    "start": 0,
    "docs": [
    {
    "id": "1",
    "f_Memory(GB)": [
    "4+GB"
    ],
    "pa_RAM(GB)": [
    "2+GB",
    "4GB",
    "8GB"
    ]
    }
    ]
    },
    "facet_counts": {
    "facet_queries": {},
    "facet_fields": {
    "f_Memory(GB)": [
    "4+GB",
    1,
    "8+GB",
    1
    ]
    },
    "facet_dates": {},
    "facet_ranges": {},
    "facet_intervals": {},
    "facet_heatmaps": {}
    }
    }

    关于solr - 刻面字段中带有特殊字符的刻面结果错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39443359/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com