Hãy giúp!
Đối với mọi sự cố Windows Search, đề xuất của tôi là hai điều:
- Đọc tài liệu AQS (Cú pháp truy vấn nâng cao) để bạn biết tất cả các ký tự đặc biệt làm gì.
- Biết rằng Windows Search sẽ chuyển đổi truy vấn của bạn thành AQS chính xác và trừ khi bạn cụ thể trong các truy vấn của mình, Windows sẽ đoán AQS bạn thực sự có ý gì. Kết quả có thể gây ngạc nhiên!
Đầu tiên, một số điều cơ bản về AQS
Theo mặc định, các thuộc tính tệp chuỗi (Tên tệp, tác giả, v.v.) tìm kiếm COP_WORD_STARTSWITH
$<
, do đó, bất kỳ từ nào (được phân tách bằng spaces , - _ () []
và nhiều hơn) bắt đầu bằng cụm từ tìm kiếm của bạn. Các thuộc tính không phải chuỗi khác (Ngày, v.v.) tìm kiếm với COP_EQUAL
=
hoặc khớp chính xác theo mặc định (Không có thẻ hoang dã *
và bằng ?
chữ).
Thứ hai, nếu bạn đang tìm kiếm ở bất kỳ vị trí được lập chỉ mục nào , thì tất cả các vị trí không được lập chỉ mục trong truy vấn của bạn sẽ không được hiển thị.
Thứ ba, Nhấp vào Thanh địa chỉ để xem AQS Windows Search thực sự được tìm kiếm với cái gì. Bạn có thể bỏ qua mẩu vụn vị trí và tên hiển thị: Nó sẽ được mã hóa theo phần trăm, vì vậy hãy giải mã trên một trang web như https://www.url-encode-decode.com/
Thứ tư, không có giấy tờ *
và ?
hành xử không chính đáng trong AQS trừ khi chúng nằm trong một ~
COP_DOSWILDCARDS
truy vấn (có nghĩa là từ không bắt đầu bằng và thẻ hoang dã *
hoặc ?
được giải thích). Tìm kiếm Windows thường sẽ chuyển đổi các tìm kiếm thành một ~
truy vấn. Ví dụ, có vẻ như các thẻ hoang dã **
và ?
với các ký tự chữ và số tìm kiếm thuộc tính chuỗi ~
, nhưng **
không có tìm kiếm chữ và số. Ngoài ra đơn *
trong các ~
truy vấn không được coi là ký tự đại diện với COP_WORD_STARTSWITH
$<
.
Hãy phân tích các truy vấn của bạn
(
AQS search-ms:displayname=Search Results in Users&crumb=&crumb=location:C:\Users
đơn giản hóacrumb=
Chà, không được trích dẫn (
là một toán tử nhóm khi bạn sử dụng AND
hoặc OR
, bạn không nhóm gì cả, vì vậy Windows nghĩ rằng bạn có nghĩa là nhóm không có gì tìm kiếm mọi thứ.
*(*
AQS crumb=
Hầu hết các tìm kiếm windows bắt đầu bằng *
windows đều cố gắng chuyển đổi thành crumb=~~query_term
(tìm kiếm chứa). *
được coi là bình thường trong một truy vấn chứa. Dù sao, trong trường hợp này, bạn sẽ nhận được một nhóm không có gì, vì vậy Windows sẽ tìm kiếm tất cả các nhóm không có gì (hoặc tất cả mọi thứ!)
"("
AQS crumb=System.Generic.String:"("
Trích dẫn tìm kiếm cụm từ chính xác (toàn bộ từ hoặc tài sản phải phù hợp) và có ký tự chữ trừ *
, ?
và ""
trở thành "
. Điều này tìm kiếm các từ bắt đầu bằng (
, nhưng vì các từ không (
chỉ tìm kiếm các thuộc tính chỉ(
*"("*
AQS crumb=Rating:(>=1 <13) OR System.Generic.String:** System.Generic.String:"("*
Điều này thật điên rồ, nhưng Windows Search cố gắng chuyển đổi tiền tố *
theo sau bởi một số ký tự đặc biệt là xếp hạng sao. 1-13 là 1 sao. Cũng lưu ý từ thử nghiệm của tôi, **
không có bất kỳ ký tự chữ và số nào trước hoặc sau khi tìm kiếm không có gì thay vì thẻ hoang dã và không thể đoán trước.
Truy vấn đầy đủ này có nghĩa là
(Xếp hạng 1 sao HOẶC Từ bắt đầu không có gì) VÀ các thuộc tính chỉ (
. *
sẽ không khớp với bất kỳ nhân vật nào khác vì toàn bộ tài sản phải có (
.
Đơn giản hóa nó có nghĩa là, các tập tin 1 sao được gọi là (
**
trong truy vấn thực sự cho thấy một (
tệp không phải là một ngôi sao đối với tôi, nhưng khi thay đổi **
thành ***
và quay lại **
nó đã cho kết quả như mong đợi ( **
không thể đoán trước)
Các câu trả lời khác
~="("
AQS crumb=System.Generic.String:~="("
Điều này không hoạt động, các cửa sổ dường như không tìm thấy gì nếu số lượng tìm kiếm quá nhiều. filename:~="("
làm việc. Về cơ bản tìm thấy một tên tệp chỉ chứa một (
nơi nào đó
"*(*"
AQS crumb=filename:~~"*(*" OR System.Generic.String:"*(*"
Điều này đã làm việc. Tên tệp chứa *(*
thẻ hoang dã HOẶC bất kỳ từ thuộc tính nào bắt đầu bằng thẻ hoang dã và có một (
. Lưu ý, cả hai ~=
và ~~
có nghĩa là chứa.