匹配 Solr 中多值字段中的所有标记

Rul*_*ian 5 php solr tokenize

我正在尝试通过将串行字符串标记为多值字段内的单个术语来解决搜索需求的方法。基本上,每个文档可能包含多个用于搜索的值。用户搜索可以匹配多值字段内的任何值,但是,所有术语都必须匹配该多值字段内单个项目的值。所以这是我的设置

我有一个字段类型,我们称之为“tokensearch”

<fieldType name="tokensearch" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
        <tokenizer class="solr.PatternTokenizerFactory" pattern="\|\s*" />
        <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
       <analyzer type="query">
        <tokenizer class="solr.PatternTokenizerFactory" pattern="\ \s*" />
        <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>
Run Code Online (Sandbox Code Playgroud)

示例数据字段将是

<arr name="tokensearch">
    <str>a:3|b:3|c:3|d:5|e:5</str>
    <str>a:1|b:3|c:5|d:4|e:2</str>
    <str>a:2|b:3|c:3|d:2|e:1</str>
</arr>
Run Code Online (Sandbox Code Playgroud)

这将基本上在 solr 中创建一个多维数组,因此它看起来像这样

a[0]=array(a:3,b:3,c:3..)
a[1] = array(a:1,b:3,c:5..)
Run Code Online (Sandbox Code Playgroud)

该部分正在正常工作,但是当我搜索"a:1 c:5" 应该发生的事情时,我的查询解析器应该说是给我的字段,其中顶部数组的单个项目包含 a:1 和 c:5

现在,只要它们按顺序出现,“a:1 b:3 c:5”就会匹配数组[1],但是“a:1 c:5”不会。

这就是我的设置,我的目标是在多值字段中拥有一个可指定的值组合,其中传递的所有标记都必须匹配。

我目前的查询非常简单 q=tokensearch:"a:1 c:3"

我试过玩查询,但这似乎最接近我需要的 q=tokensearch:"a:1" tokensearch:"c:3"&q.op=AND - 返回包含 a:1 和 c 的文档: 3 在多值数组的不同条目中

如果您需要有关我正在尝试的内容的更多信息,请告诉我。如果您有任何想法如何使这项工作正常工作,这样我就不必按顺序指定令牌,那会很棒。

另外:当我做一个字段分析器时,它确实会乱序匹配我的令牌,所以我有点困惑为什么它不会在真正的搜索过程中