Lucene NOT_ANALYZED 不支持大写字符
Lucene NOT_ANALYZED not working with uppercase characters
我使用 StandardAnalyzer 建立了一个索引,在这个索引中有几个字段。例如,假设它有 Id 和 Type。两者都是 NON_ANALYZED,这意味着您只能按原样搜索它们。
我的索引中有几个条目:
{Id: "1", Type: "Location"},
{Id: "2", Type: "Group"},
{Id: "3", Type: "Location"}
当我搜索 +Id:1
或任何其他数字时,我得到了适当的结果(再次使用 StandardAnalyzer)。
但是,当我搜索 +Type:Location
或 +Type:Group
时,我没有得到任何结果。奇怪的是,当我启用前导通配符时,+Type:*ocation
会产生 return 结果! +Type:*Location
或其他组合不。
这让我相信 indexer/query 不喜欢大写字符!在对它们进行索引之前将类型小写为 location
和 group
之后,我可以这样搜索它们。
如果我将 Type-field 设置为 ANALYZED,它几乎可以用于任何搜索(uppercase/lowercase,等等),但我想按原样查询 Type-field。
我完全不明白为什么要这样做。谁能向我解释为什么我的索引器不允许我搜索 NON_ANALYZED 具有大写值的字段?
您在解析查询字符串 (+Type:Location
) 时是否使用 StandardAnalyzer? StandardAnalyzer 将 lower-case 所有术语,因此您实际上是在使用 +Type:location
.
进行搜索
搜索和索引时始终使用相同的分析器。查看使用 PerFieldAnalyzer 并将类型字段设置为使用 KeywordAnalyzer。
我使用 StandardAnalyzer 建立了一个索引,在这个索引中有几个字段。例如,假设它有 Id 和 Type。两者都是 NON_ANALYZED,这意味着您只能按原样搜索它们。
我的索引中有几个条目:
{Id: "1", Type: "Location"},
{Id: "2", Type: "Group"},
{Id: "3", Type: "Location"}
当我搜索 +Id:1
或任何其他数字时,我得到了适当的结果(再次使用 StandardAnalyzer)。
但是,当我搜索 +Type:Location
或 +Type:Group
时,我没有得到任何结果。奇怪的是,当我启用前导通配符时,+Type:*ocation
会产生 return 结果! +Type:*Location
或其他组合不。
这让我相信 indexer/query 不喜欢大写字符!在对它们进行索引之前将类型小写为 location
和 group
之后,我可以这样搜索它们。
如果我将 Type-field 设置为 ANALYZED,它几乎可以用于任何搜索(uppercase/lowercase,等等),但我想按原样查询 Type-field。
我完全不明白为什么要这样做。谁能向我解释为什么我的索引器不允许我搜索 NON_ANALYZED 具有大写值的字段?
您在解析查询字符串 (+Type:Location
) 时是否使用 StandardAnalyzer? StandardAnalyzer 将 lower-case 所有术语,因此您实际上是在使用 +Type:location
.
搜索和索引时始终使用相同的分析器。查看使用 PerFieldAnalyzer 并将类型字段设置为使用 KeywordAnalyzer。