DSE:通配符搜索

Posted

技术标签:

【中文标题】DSE:通配符搜索【英文标题】:DSE: Wildcard searches 【发布时间】:2019-09-25 17:51:21 【问题描述】:

我目前正在尝试使用链接here 进行通配符搜索并相应地编辑了我的架构文件,我还阅读了以下thread 并尝试对SOLR 进行必要的更改并使用token(hel*o) 进行查询但未能完成所需的搜索结果。因此,我想问一下我的通配符搜索方法是否不正确?我注意到可以使用tokenRegex(...) 搜索正则表达式,而无需更改架构。

===更新===

DSE Version : 6.7.2
Execution code : g.V().hasLabel("person_node").has("name", "Jo*")

Schema Used
----------------
<fieldType class="org.apache.solr.schema.TextField" name="TextWildcard">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true" maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

我想实现一个普通的通配符查询,其中 * 表示可以有很多非空格字符匹配,例如 Hel*o 将能够匹配 Hello、Heleawo 或 Helzzzzo。

此外,它还可以与 ?它只匹配一个非空格字符,例如 Hel?o 将匹配 Helzo 而不是 Helzzzo。

【问题讨论】:

使用什么 DSE 版本,以及如何执行查询。您创建的架构是什么,最重要的是 - 您想要实现什么 - 类似于 SQL 的“LIKE”操作? @AlexOtt 我已经更新了帖子,希望它能回答您的要求。 【参考方案1】:

啊,好吧 - 你没有使用正确的图形操作。要执行您想要的操作,您需要执行以下操作:

Create search index 在给定的属性上:

schema.vertexLabel('person_node').index('searchname').search().by('name').asString().add()

Perform search 与:

g.V().hasLabel("person_node").has("name", regex("Jo*"))

【讨论】:

我已经尝试了提出的解决方案,但它仍在根据正则表达式对其进行分析,其中Jo* 将匹配Jooooooooo 而不是John,如果我想解决这个问题,将会有一个需要做Jo.* 其中. 代表任何字符。 @亚历克斯·奥特 每个系统使用都有自己的正则表达式语言。这里使用的是 Java...

以上是关于DSE:通配符搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何限制多个通配符搜索?

Gsutil 通配符搜索

日期字段通配符搜索

LINQ 的通配符搜索

Linq通配符搜索mvc c#

执行通配符搜索