我正在查询SOLR数据。其中一个字段是一个看起来像这样的数组(有很多记录,这只是第一个):
"office_address_line1": [
"Po",
"317 S Drexel Blvd #330",
"35 Village Plaza",
"2215 Carol Ave",
"35 Drexel BLVD",
"158 Connecticut Ave"
]
}
请注意,一行只是" Po"。还有其他条目的值类似于" Po Box 7"和#34; Po Box 70"等
首先,如果我想找到Po,我确实做 office_address_line1:Po ,但不是完全匹配,而是从Po开始。如果我 office_address_line1:" Po Box 7" ,它只会获得7而不是70.
首先,我想弄清楚为什么会这样。但更重要的是,我需要找到少于7个字符的地址。我尝试各种各样的事情,比如/.{6}/或/.{1,7}/和/^.{1,7}$/甚至!office_address_line1:/。{7,100} /但没有什么能回报我想要的东西。指定范围会返回该范围内外的内容。
所以我想知道为什么 office_address_line1:" Po" 不会返回完全匹配的地方。其次,我想知道为什么我的范围查询没有返回我想要的内容。我必须阅读Google为SOLR查询提出的所有内容。
我有一个问题。由于它是一个字符串数组,查询是否必须匹配数组中的每一行?否则,我应该做什么样的查询?如果情况变得更糟,因为我说应该只有" Po"但那个查询也不起作用。
答案 0 :(得分:0)
由于text是你的字段类型,因此字段在空格上被标记化。
因此,您的查询office_address_line1:"Po"
将返回所有具有令牌" Po"的文档。
对于长度小于7的字段,请尝试office_address_line1:/.{1,7}./
。但要使此查询生效,您的office_address_line1字段应编入索引(作为单个标记)。
您可以使用solr <copyfield>
标记将此字段的副本另存为字符串,并在该复制的字段上运行您的范围查询。