如何查询子字符串的solr字段

时间:2016-08-12 00:20:37

标签: solr

我的用例: 我有一个名为cqpath的单值字段。这是一个文本字段,其值如下所示:

  1. " /内容/结构域/ EN /路径/到/一些/页"
  2. " /内容/结构域/ EN /路径/到/另一个/页"
  3. " /内容/结构域/ EN-US /路径/到/一些/页"
  4. " /内容/结构域/ EN-US /路径/到/另一个/页"
  5. 我想形成一个能让我回归的查询1.和2.我一直在尝试写作:

    cqpath:" / content / domain / en"

    被发现是错误的,因为它也检索了项目3和4。您是否有人想到一种方法来编写一个只返回1.和2.而不是3.和4的查询。?

    这是普通的文本字段字段类型。非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

从Solr 4.0开始,您可以使用正则表达式查询。您可以找到一些有用的示例here。 在您的情况下,您可以使用以下内容获取您正在寻找的结果:

var data1 = [3, 6, 2, 7, 5, 2, 0, 3, 8, 9, 2, 5, 9];
var data2 = [9, 5, 2, 8, 3, 1, 7, 4, 2, 1, 9, 0, 3];

var width = 800; 
var height = 400; 

var graph = d3.select(".graph");

var container = graph.append("svg")
      .attr("width", width)
      .attr("height", height)
      .style("padding", "10px")
      .classed("container", true);

var xScale = d3.scale.linear()
  .domain([0, data1.length])
  .range([0, width]);

var yScale = d3.scale.linear()
  .domain([0, 10])
  .range([height, 0]);

var line = d3.svg.line()
  .x(function (d, i) {
    return xScale(i); 
  })
  .y(function(d) { 
    return yScale(d); 
  })

function drawChart(dataSource) {
  var chart = graph.select(".container")
    .append("g")
    .append("path")
      .attr("d", line(dataSource));
}

drawChart(data1);
drawChart(data2);

答案 1 :(得分:0)

看起来您正在尝试将此处的部分路径与路径元素(斜杠)上的边界相匹配。通常的通用解决方案是在索引期间标记化以在查询期间生成所有替代完成并且标记化。因此,字段类型声明不是对称的。在Solr分布中有一些例子。你会看到使用类似(仅限索引时间)EdgeNGramFilterFactory而不是更昂贵的正则表达式匹配的东西。

对于您的具体情况,您可能需要查看自动为您执行此操作的测试PathHierarchyTokenizer

如果您的内容更像是完整网址而不仅仅是路径,那么您也可能会对包含URLClassify URP的自定义更新请求处理器链感兴趣。它没有很好的记录,但提到generating url parts,这是我认为你想要的。