Skip to content

Commit

Permalink
Enhance: あいまい検索無効時にワイルドカードを利用可能に (#564)
Browse files Browse the repository at this point in the history
  • Loading branch information
penginn-net authored Jan 10, 2025
1 parent c05ba5e commit 14141fe
Show file tree
Hide file tree
Showing 3 changed files with 111 additions and 8 deletions.
1 change: 1 addition & 0 deletions CHANGELOG_YOJO.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

### Server
- Change: `ap/fetch-outbox`から`includeAnnounce`オプションを削除 [#606](https://github.com/yojo-art/cherrypick/pull/606)
- Enhance: 高度な検索であいまい検索が無効な時ワイルドカードを利用可能に [#564](https://github.com/yojo-art/cherrypick/pull/564)
- Feat: フォローしているユーザーなら鍵ノートでもアンテナにひっかかるように [#568](https://github.com/yojo-art/cherrypick/pull/568)
- based-on https://github.com/team-shahu/misskey/pull/38

Expand Down
92 changes: 88 additions & 4 deletions doc/Advanced-Search.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,47 @@

### 高度な検索の使い方
- [検索対象](#検索対象)
- [クエリ検索](#クエリ検索)
- [特殊検索](#特殊検索)
- [オプション](#オプション)
#### 検索対象
- 本文
- 閲覧注意(CW)に設定された警告文
- ハッシュタグ
- 投票の選択肢

<details open><summary> OR検索</summary>
検索許可について
ノートを見つけやすくする(indexable)、は投稿設定の`反応した人`と同じになります。
ノートを見つけやすくするの値より、個別の検索許可が優先されます。

プロフィールに下記ハッシュタグの記載があるか、ノートに設定されている。
反応者: `クリップ、お気に入り、リアクション、リノート`いづれかを行った人
- `#searchable_by_all_users`
- 条件なしで検索可能
- 投稿設定では、すべてのユーザー
- `#searchable_by_followers_only`
- 当該ノートのフォロワーか反応者のみ検索可能
- 投稿設定では、フォロワーと反応した人
- `#searchable_by_reacted_users_only`
- 当該ノートの反応者の検索可能
- 投稿設定では、反応した人
- `#searchable_by_nobody`
- 本人以外検索不可
- 投稿設定では、自分のみ

検索対象外
- 検索可能範囲が自分のみである他人のノート
- プロフィールに`#searchable_by_nobody`と記載されているユーザーのノート

#### クエリ検索
<details><summary> OR検索</summary>

猫かにゃんを含むノートを検索
`猫|にゃん`
|(パイプ)をキーワードの間に入れます
</details>

<details open><summary>AND検索</summary>
<details><summary>AND検索</summary>

猫とにゃんを含むノートを検索
```
Expand All @@ -17,7 +50,7 @@
全角または半角のスペースをキーワードの間に入れます
</details>

<details open><summary> NOT検索</summary>
<details><summary> NOT検索</summary>


猫を含みにゃんを含まないノートを検索
Expand All @@ -27,10 +60,61 @@
半角スペースで区切ってから-(マイナス/ハイフン)キーワードの間に入れます
</details>

<details open><summary>組み合わせ検索</summary>
<details><summary>組み合わせ検索</summary>

にゃんを含み、猫または狐を含み、こやんを含まないノートを検索
```
にゃん (猫|狐) -こやん
```
</details>

#### 特殊検索
<details><summary>リアクション検索</summary>

ノートにつけられたリアクションで検索します。
検索クエリが指定されている場合は、どちらかが一致していれば一致となります。

ローカルユーザーがつけたリアクション
```
:awesome_reaction:
```
ホストを問わずに検索
```
:awesome_reaction*
```
</details>
<details open><summary>あいまい検索の無効化</summary>
あいまい検索を無効にした検索を行います。
クエリ検索の機能は利用できません。完全一致または部分一致が利用できます。

完全一致
```
サンプル
```
部分一致
```
*サンプル*
```
間に1文字以上が入る部分一致(*は0文字でも該当)
```
サ?プル
```
</details>

#### オプション
- フォローフィルタ
- フィルタなし
- フォロー中
- フォロー外
- ファイルの添付状態
- フィルタなし
- 添付あり
- 添付なし
- 添付ファイルのセンシティブ状態
- フィルタなし
- 含む
- 含まない
- すべてセンシティブ
- リプライ除外
- CW除外
- 引用ノート除外
26 changes: 22 additions & 4 deletions packages/backend/src/core/AdvancedSearchService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@ export class AdvancedSearchService {
if (!this.opensearch) return;
if (note.searchableBy === 'private' && note.userHost !== null) return;//リモートユーザーのprivateはインデックスしない

if (note.text === null && note.cw === null && note.fileIds.length === 0 && note.renoteId) { //リノートであり
if (isRenote(note) && !isQuote(note)) { //リノートであり
if (note.userHost === null) {//ローカルユーザー
if (note.renote?.searchableBy === 'private') return;//リノート元のノートがprivateならインデックスしない
await this.index(this.renoteIndex, note.id, {
Expand Down Expand Up @@ -952,9 +952,27 @@ export class AdvancedSearchService {
}

if (q && q !== '') {
const fields = ['tags', opts.useStrictSearch ? 'text.keyword' : 'text'];
if (!opts.excludeCW) { fields.push(opts.useStrictSearch ? 'cw.keyword' : 'cw' );}
osFilter.bool.must.push({ simple_query_string: { fields: fields, 'query': q, default_operator: 'and' } });
if (opts.useStrictSearch) {
osFilter.bool.must.push({
bool: {
should: [
{ wildcard: { 'text.keyword': q } },
{ wildcard: { 'cw.keyword': q } },
{ wildcard: { 'pollChoices.keyword': q } },
{ wildcard: { 'tags': q } },
],
minimum_should_match: 1,
},
});
} else {
const fields = ['tags', 'text', 'pollChoices'];
if (!opts.excludeCW)fields.push('cw');
osFilter.bool.must.push({ simple_query_string: {
fields: fields, 'query': q,
default_operator: 'and',
},
});
}
}

const Option = {
Expand Down

0 comments on commit 14141fe

Please sign in to comment.