Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带空格和连字符的Lucene排序搜索_Java_Lucene - Fatal编程技术网

Java 带空格和连字符的Lucene排序搜索

Java 带空格和连字符的Lucene排序搜索,java,lucene,Java,Lucene,Lucene 8.0.0 我有一个字段,我正在这样索引: doc.add(new SortedDocValuesField("nameS", new BytesRef(name.toLowerCase()))); doc.add(new StoredField("name", name)); London-UK Bristol-UK Bristol-AUS New York-USA Washington-USA String escapedSearch = QueryParserUtil.e

Lucene 8.0.0

我有一个字段,我正在这样索引:

doc.add(new SortedDocValuesField("nameS", new BytesRef(name.toLowerCase())));
doc.add(new StoredField("name", name));
London-UK
Bristol-UK
Bristol-AUS
New York-USA
Washington-USA
String escapedSearch = QueryParserUtil.escape(search.toLowerCase())
Query query = qp.parse("nameS:" + escapedSearch + "*");
TopFieldDocs results = searcher.search(query, 100, new Sort(new SortField("nameS", Type.STRING)));
name的值如下所示:

doc.add(new SortedDocValuesField("nameS", new BytesRef(name.toLowerCase())));
doc.add(new StoredField("name", name));
London-UK
Bristol-UK
Bristol-AUS
New York-USA
Washington-USA
String escapedSearch = QueryParserUtil.escape(search.toLowerCase())
Query query = qp.parse("nameS:" + escapedSearch + "*");
TopFieldDocs results = searcher.search(query, 100, new Sort(new SortField("nameS", Type.STRING)));
所以它们有空格和连字符。然而,我似乎无法让我的搜索正常运行——当搜索到空格或连字符时,它似乎放弃了

我用于索引和搜索的分析器是
标准分析器

我使用如下代码进行搜索:

doc.add(new SortedDocValuesField("nameS", new BytesRef(name.toLowerCase())));
doc.add(new StoredField("name", name));
London-UK
Bristol-UK
Bristol-AUS
New York-USA
Washington-USA
String escapedSearch = QueryParserUtil.escape(search.toLowerCase())
Query query = qp.parse("nameS:" + escapedSearch + "*");
TopFieldDocs results = searcher.search(query, 100, new Sort(new SortField("nameS", Type.STRING)));

允许搜索使用空格和连字符在哪里做错了?顺便说一句,我在索引和搜索时调用了
.toLowerCase()
,这是标准做法吗?

您能分享一个源数据示例,显示可以找到这些术语的上下文吗?
StandardAnalyzer
(请参阅)包括
StandardTokenizer
,也为您提供
toLower
StandardTokenizer
打破了单词边界,还删除了一些标点符号。请参见“快速棕色狐狸”示例。因此,为分析和标记化提供建议,一些源数据上下文可能会有所帮助。此外,请记住,
StandardAnalyzer
如何索引事物可能不会损害搜索。您的搜索使用与索引器相同的分析器,
StandardAnalyzer
是否真的使搜索无法按您预期的方式工作?我应该先问一下。@andrewjames-我索引的不是“块”文本,而是提供的特定标记。文档来自JSON,其中每个字段都是一个精确的标记。所以你们可以想象:
String name=“伦敦英国”。。。;doc.add(new StoredField(“name”,name))
我是基于
SortedDocValuesField
字段进行查询的,该字段是
BytesRef
-我应该基于字段
name
进行查询,并且只使用
名称
进行排序吗?